作成日:2018-03-27, 更新日:2018-03-27
fuelPHP コントローラー内の各アクションでの共通処理と一部だけ例外にしたい。
基本
コントローラー内の各アクションでの共通処理は「before()」内でゴニョゴニョする。
class Controller_Kushi extends 〇〇〇 {
public function before() {
if ( !\Auth::check() ) {
// ログインしていない人
}
else {
// ログインしている人
}
parent::before();
}
public function action_chicken() {
~ 略 ~
特定のアクションだけ除外したい
諸々の理由で一つだけ除外したいときがある。
例えば
・「/kushi/〇〇〇」は、ログインチェックをするようにしている。
・「/kushi」に「/wholezebra」をログインチェック無しで追加したい。
・・・こんなとき。
解決案1
コントローラーを別に用意する。
・「/kushi/〇〇〇」は、既存のまま
・「/kushi2/wholezebra」を別途、用意する。
→URLが「/kushi/」と「/kushi2/」で分かれるのが気に入らない。
解決案2
コントローラーを別に用意して、ルーティングで対応。
・「/kushi/〇〇〇」は、既存のまま「controller/kushi.php」を読み込ませる。
・「/kushi/wholezebra」は「controller/kushi2.php」を読み込ませる。
→似たようなファイルが2つあると、メンテのとき面倒になるから避けたい。
※ルーティングで分けたコトを忘れたりすると戸惑う。
解決案3
これが、本題。
「before()」内でアクション名で条件分岐させる(大文字を考慮して、小文字に変換してからチェック)
class Controller_Kushi extends 〇〇〇 {
public function before() {
if ( strtolower(\Request::active()->action) == 'wholezebra' ) {
// 「kushi/wholezebra」にアクセスしようとしている人
}
else {
if ( !\Auth::check() ) {
// ログインしていない人
}
else {
// ログインしている人
}
}
parent::before();
}
public function action_chicken() {
~ 略 ~
}
public function action_pork() {
~ 略 ~
}
public function action_zebra() {
~ 略 ~
}
public function action_wholezebra() {
~ 略 ~
}