Temat: Relacje i błąd przy generowaniu obrazka

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

class Group extends AppModel {
    var $name = 'Group';
    var $displayField = 'name';

    var $hasMany = array(
        'Member' => array(
            'className' => 'Member',
            'foreignKey' => 'id',
            'dependent' => false
        )
    );

}

A w modelu Member (używam go zamiast User), mam:

var $name = 'Member';
    var $displayField = 'username';
    var $belongsTo = array(
        'Group' => array(
            'className' => 'Group',
            'foreignKey' => 'group_id'
        )
    );

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.

header("Expires: Sun, 1 Jan 2000 12:00:00 GMT");
    header("Last-Modified: " . gmdate("D, d M Y H:i:s") . "GMT");
    header("Cache-Control: no-store, no-cache, must-revalidate");
    header("Cache-Control: post-check=0, pre-check=0", false);
    header("Pragma: no-cache");
    header("Content-Type: image/png");
    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:

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ść:

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.

2

Odp: Relacje i błąd przy generowaniu obrazka

hej,

w ogole to powinienes stworzyc osobny kontroler na Captche - np. CaptchaController - w nim w metodzie index() mozesz generowac obrazek pamietajac o wylaczeniu layoutu i widoku:



function index() {
$this->layout = null;

$this->autoRender = false;

Configure::write('debug', 0);
//generujesz obrazek
}

3

Odp: Relacje i błąd przy generowaniu obrazka

sabat24 napisał/a:

Problem jest w tym, że przy powyższej deklaracji zależności w modelu Member, do przeglądarki wysyłany jest nagłówek:

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ść:

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.

Taki nagłóek sugeruje, że niedostajesz obrazka, ale html z informacją o błedzie (nieistniejąca klasa, albo coś w ten desen?).

Pamiętaj, że Cake przy błedach wysyła stronę (Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8) html (np. o nieistniejącym modelu/kontrolerze/widoku)

Dodaj sobie metodę w tym samym kontrolerze co generująca captcha. Możliwe, że dostaniesz te same błędy, skoro zależą one od tego jakie relacje zdefiniujesz w modelach. Może gdzieś masz zwykłą literówkę?

Co do osobnego kontrolera - to jest też niezły pomysł.

Ostatnio edytowany przez id02009 (2009-11-20 12:31:29)

4

Odp: Relacje i błąd przy generowaniu obrazka

Dzięki za informacje, w zasadzie nie wpadłem na to, żeby oprzeć captcha o osobny controller i tak właśnie zrobiłem, więc problem się już nie pojawia.