2017-11-24 13 views
2

私はCakePHP 3.5を使用しています。使用したいメソッドの2つが推奨されておらず、代替手段が見つかりません。CakePHPレスポンスの停止を廃止

方法は以下のとおりです。

$this->response->send(); 
$this->response->stop(); 

は、私は別のページにリダイレクトし、現在のメソッドの実行を停止します。リダイレクトした後にdie()に電話してみると、うまくいきません。

migration guideによれば、この方法は廃止されている。

どのような考えですか?

編集:

特定のページにアクセスできないユーザーをリダイレクトしようとしています。これはコントローラのinitialize()メソッドにあります。

if ($allowedAccess) { 
    $this->Flash->error("Insufficient rights to access that location"); 
    $this->redirect($this->referer()); 
    // FIXME - find alternative to deprecated methods 
    return $this->response; 
    $this->response->send(); 
    $this->response->stop(); 
} 
+0

なぜあなたはCakeに付属の認証システムを使用していませんか?あなたのために自動的にリダイレクトとフラッシュを行います。このページを読んでください:https://book.cakephp.org/3.0/en/controllers/components/authentication.htmlああ、次回は、質問の際に問題のコード全体を追加してください。これは今や別の状況です... – burzum

+0

LDAPを使用しており、ユーザーが適切なグループにいることを確認しているためです。 – Eric

+0

LDAPはケーキの認証システムで動作します。 3.x用に少なくとも2つのプラグインがあり、CakePHP 3.5以降で動作してきた新しい認証レイヤーは、すぐにLDAPをサポートしています:https://github.com/cakephp/authentication/blob/master/docs /Identifiers.md#ldap独自の実装を好む場合は、authシステム用のアダプタとして実装する必要があります。 – burzum

答えて

1

コントローラでこれを試していますか?単にあなたのコントローラメソッドから応答オブジェクトを返します。

public function index() { 
    // Some code 
    return $this->response; 
} 

送信を()単なるラッパーの周りexit() PHPSました。あなたがどこかにいる必要がある場合は、exit()を使用してください。

応答を返すと、ActionDispatcherが戻り値を処理し、応答オブジェクトである場合があります。方法は__invoke()を参照してください。

応答がthe middleware layerを通過し、最終的にはServerで使用されているResponseEmitterでお送りします。あなたのwebroot/index.phpで確認してください:

// Bind your application to the server. 
$server = new Server(new Application(dirname(__DIR__) . '/config')); 
// Run the request/response through the application 
// and emit the response. 
$server->emit($server->run()); 
+0

この提案は私のために働いていません。私は元の投稿に詳細を追加しました。 – Eric