6

私のCakePHP2アプリケーションでは、beforeFilterに問題があります。このスレッドではうまくいきました。CakePHPの古いバージョンのため。

私のコードでは、ユーザーが許可されていない場合は、「anotherview.ctp」を表示したいと思います。訪問者を別のページにリダイレクトしたくありません。(AdSenseの問題のため)

beforeFilterで「this->render」を使用すると、「index」アクションのコードも実行されます。「beforeFilter」の最後の行の後で実行を停止したい。beforeFilterに「exit()」を追加すると、コードが壊れました。

コードを壊さずにbeforeFilterで実行を停止するにはどうすればよいですか?

class MyController extends AppController {
    function beforeFilter() {
        if ( $authorization == false )  {
                $this->render('anotherview');
                //exit();
            }
        }
    }

    function index() {
        // show authorized staff
    }           
}
4

4 に答える 4

20

試す:

$this->response->send();
$this->_stop();
于 2012-05-28T04:10:15.850 に答える
4

同じことをしようとしているときに、このスレッドに出くわしました。受け入れられた答えは機能しますが、重要な詳細が省略されています。(ビューではなく)レイアウトをレンダリングしようとしていますが、元のリクエストのビューがエラーをスローしないように、行を追加する必要がありました。

内部AppController::beforeFilter()

$this->render(FALSE, 'maintenance'); //I needed to add this
$this->response->send();
$this->_stop();
于 2014-01-09T16:39:05.643 に答える
1

または、別のビューにリダイレクトします。

if ( $authorization == false )  {
    $this->redirect('/users/not_authorized');
}
于 2012-05-28T15:20:48.470 に答える
0

CakePHP 3.5の場合、これが私にとってうまくいったことです。

$event->setResult($this->render('anotherview'));

これにより、デバッガーを使用することもできます。exit;ステートメントを使用すると、CakePHPデバッガーが機能しなくなりました。

于 2020-10-03T14:58:12.513 に答える