http://docs.phalconphp.com/en/1.2.6/reference/routing.html#match-callbacks
まず、フィルタクラスを作成します。尚、di()という関数が書いてありますが、この後に書くユニットテスト関係になります。(書きました。 http://madroom-project.blogspot.jp/2014/03/phalcon_22.html )
<?php namespace Core\Filter; /** * Class AjaxFilter */ class AjaxFilter { /** * @var \Phalcon\Http\Request */ protected $request; /** * constructor */ public function __construct() { $this->request = di()->get('request'); } /** * @return bool */ public function filter() { return $this->request->getServer('X_REQUESTED_WITH') === 'xmlhttprequest'; } }ルーティングで、以下のようにします。AjaxFilter#filter()の戻り値(bool)で、このルーティングにマッチするかしないかが決まります。beforeMatch()はチェインもできるようです。
$router->add('/', 'Index::index')->beforeMatch([new Core\Filter\AjaxFilter, 'filter']);要認証の基底コントローラ、要Ajaxの基底コントローラ。とかを作ってコンストラクタで制御する手段もありますが、その場合、要認証かつ要Ajaxとかなってくると、ややこしくなるので、こんな感じが良いのかなと思いました。
追記: Phalcon\Mvc\Controllerのコンストラクタはどういうわけか final になっていました。また、beforeMatch()をチェインした時、一方しか働かないような挙動になりました。(まだ細かくは見ていませんが。)
次はこのフィルタクラスをテストしてみます。
No comments:
Post a Comment