Fuel 1.7 での router() メソッドのキャンセル方法を教えてください

203 views
Skip to first unread message

Isao Tanji

unread,
Mar 16, 2016, 6:34:08 AM3/16/16
to fuelphp.jp
たんじと申します。

コントローラの router() メソッド内にて特定の条件においてのみ他のコントローラーへリダイレクトさせ、それ以外はルーティングをキャンセルし、リクエストされたコントローラーを呼出したく、Fuel 1.6では下記コードで期待通り動作しておりました。

--
public function router($method, $params) {

    switch ($this->error_type) {
case Controller_AuthBase::ERROR_TYPE_LOGIN:
Response::redirect('login/login');
break;
    }
    
    return parent::router($method, $params);
}
--

Fuel を 1.7 へバージョンアップさせたところコントローラに router() メソッドの定義がなくなってしまったようで、parent::router() にてエラーになってしまいます。

1.7 においてルーティングをキャンセルしたい場合、どのように実装したらよろしいでしょうか。

kit.t

unread,
Mar 17, 2016, 2:41:33 AM3/17/16
to fuelphp.jp
kittです。

この件調べてみたところ、思ったよりrouterは影響範囲が広いですね。
routerメソッドを作る事は、Requestオブジェクトが行っているメソッド決定の責務を引き受けることになります。
処理内容に関してはbeforeメソッドに移植する方が適切なのではないかと思います。


routerメソッドで行う場合は、fuel/core/classes/request.phpのexecuteメソッドを参考にルーティングを再実装する必要があります。

1.6以前ではコントローラーの責務かのようになっているバグという扱いで変更されたようなので、
ひとまずfuel/core/classes/controller.phpを1.6のものと差し替えることでも動作はしますが・・・。


1.7以降のドキュメントのコントローラーの内容は正確ではないと思います。

ただこの仕様は不便だと思うので、本家のIssueに起こしてしまっても良さそうな気がします。

Isao Tanji

unread,
Mar 17, 2016, 10:43:03 PM3/17/16
to fuelphp.jp
kitt さん

コメントありがとうございます。
簡単な実装でキャンセルさせる方法はないとのことなので、別なアプローチで回避させてみました。
もともと認証エラーの際にログイン画面へリダイレクトさせたかったので、

1) 独自に下記権限Exceptionクラスを定義する。

--
use Fuel\Core\HttpException;

class HttpAuthException extends HttpException
{
public function response()
{
\Response::redirect('login/login');
}
}
--


2) Controller#before() 内で認証チェックを行い、エラーの場合は定義した HttpAuthException をスローする。


3) public/index.php に定義した Exception のハンドリングを追加する。

--
try
{
// Boot the app...
require APPPATH.'bootstrap.php';

// ... and execute the main request
$response = $routerequest();
}
catch (HttpAuthException $e)
{
$response = $routerequest('_AUTH_', $e);
}
catch (HttpNoAccessException $e)
{
$response = $routerequest('_403_', $e);
}
...
--

上記で期待通する動きになりました。


今後のために、そもそも router() メソッド内でどのようにルーティングを実装するのか、誰か教えて頂けると助かります。


2016年3月17日木曜日 15時41分33秒 UTC+9 kit.t:
Reply all
Reply to author
Forward
0 new messages