Potrzebowałem stworzyć relację pomiędzy użytkownikami, a przypisaną do nich grupą. Stworzyłem model Group

  1. class Group extends AppModel {
  2. var $name = 'Group';
  3. var $displayField = 'name';
  4.  
  5. var $hasMany = array(
  6. 'Member' => array(
  7. 'className' => 'Member',
  8. 'foreignKey' => 'id',
  9. 'dependent' => false
  10. )
  11. );
  12.  
  13. }


A w modelu Member (używam go zamiast User), mam:
  1. var $name = 'Member';
  2. var $displayField = 'username';
  3. var $belongsTo = array(
  4. 'Group' => array(
  5. 'className' => 'Group',
  6. 'foreignKey' => 'group_id'
  7. )
  8. );


Wszystko działa dobrze, jednak problem pojawia się w momencie, gdy z controllera chcę wywołać funkcję generującą obrazek captcha. Obrazek generowany jest klasycznie tzn.
  1. header("Expires: Sun, 1 Jan 2000 12:00:00 GMT");
  2. header("Last-Modified: " . gmdate("D, d M Y H:i:s") . "GMT");
  3. header("Cache-Control: no-store, no-cache, must-revalidate");
  4. header("Cache-Control: post-check=0, pre-check=0", false);
  5. header("Pragma: no-cache");
  6. header("Content-Type: image/png");
  7. imagepng($this->im);

Problem jest w tym, że przy powyższej deklaracji zależności w modelu Member, do przeglądarki wysyłany jest nagłówek:
Kod
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8


natomiast kiedy usunę z modelu Member pole var $belongsTo - wszystko działa w porządku, obrazek się generuje i nagłówek wysyłany do przeglądarki ma wartość:
Kod
Accept: image/png,image/*;q=0.8,*/*;q=0.5


Dlaczego dodanie relacji powoduje taki dziwny błąd? Tak jakby jakiś znak był wysyłany wcześniej i psuł definicję nagłówka.