私のアプリケーションでは、アプリの作業の開始時に何らかの「自動ログイン」ロジックを実行する必要があります。この「自動ログイン」機能では、多くのアクションを実行します。そのうちの 1 つは、CookieComponent を使用して Cookie を設定することです。
コントローラーまたはコンポーネントでこの autoLogin を使用すると、すべて問題ありませんが、ディスパッチャーフィルターから同じことを行うと、Cookie は設定されません。
CakePHP コードを深く掘り下げたところ、ディスパッチャー フィルターから Cookie を設定しようとすると、の$_cookies
プロパティCakeResponse
が空であることがわかりました。したがって、ディスパッチャーフィルターが独自の を作成しCakeResponse
、後でリセットするように見えるため、Cookie は設定されません。
私のフィルターは次のようになります。
class UserLoadFilter extends DispatcherFilter
{
public $priority = 8;
public function beforeDispatch($event) {
App::uses('AuthComponent', 'Controller/Component');
if (!AuthComponent::user()) {
App::uses('CustomAuthComponent', 'Controller/Component');
//$controller = new AppController($event->data['request'], $event->data['response']);
$auth = new CustomAuthComponent(new ComponentCollection(), Configure::read('Auth'));
$auth->autoLogin();
}
}
}
また、この方法で beforeDispatch メソッドに直接 Cookie を設定しようとしました。
App::uses('CookieComponent', 'Controller/Component');
$cookie = new CookieComponent(new ComponentCollection());
$cookie->write('test', 'TEST!', false, "1 day");
しかし、これも意味がありません。
私は何を間違っていますか?単純なことがわからないだけかもしれませんが、多くの時間を費やしましたが、まだこれを修正できません。この場所からクッキーを設定することはまったく可能ですか?
もちろん、setcookie を使用するか、独自の Cookie ラッパーを作成することもできますが、Cookie コンポーネントを使用して CakePHP スタイルで実行したいと考えています。