getParam('action')
で取得するアクション名は別関数に移動しても不変
2025/03/23
getParam('action')
で取得するアクション名は別関数に移動しても不変
CakePHP4系、CakePHP5系では、現在実行中のコントローラー名、アクション名を取得する際は下記のように取得します。
1 2 3 4 5 |
// 現在のコントローラー名を取得 $currentController = $this->request->getParam('controller'); // 現在のアクション名を取得 $currentAction = $this->request->getParam('action'); |
CakePHP3系ではいろいろな取得方法がありましたが、CakePHP4系、CakePHP5系では上記の「getParam()
」メソッドを使う方法に集約されました。
下記に、そのような解説記事を書いていますので、詳しく知りたい方は下記を読んでください。
「CakePHP3で現在処理しているコントローラー名、アクション名を取得する方法」
「CakePHP4で現在処理しているコントローラー名、アクション名を取得する方法」
また、上記の記事で紹介する「getParam()
」メソッドを使って、コントローラー名やアクション名を取得する方法ですが、コントローラ内でも使えますし、ビュー(テンプレート)内でも同じ記述方法で取得することができます。
覚えておくと非常に便利に利用することができます。
アクションから別の関数に遷移したときの「getParam('action')
」の結果は?
この記事では、それらの前提を踏まえたうえで
ブラウザで「A」というアクションにアクセスします。
その「A」の処理の中で、「B」という関数を呼び出して処理をするとします。
その「B」の中で「getParam('action')
」を使用すると、その結果は「A」なのか「B」なのか、分かりますか?
という内容です。
正解は「A」です。
結論だけでいい方はここで終了でいいかと思います。
具体的な検証方法を説明しながら解説をしていきます。
「getParam('action')
」でアクション名を取得する処理
「UsersController.php」の中に下記のアクションの処理があるとします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
public function view($id = null) { $user = $this->Users->get($id, contain: []); $this->set(compact('user')); echo "view - action"; echo "controller:" . $this->request->getParam('controller'); echo "action:" . $this->request->getParam('action'); $this->_view(); } public function _view() { echo "_view - action"; echo "controller:" . $this->request->getParam('controller'); echo "action:" . $this->request->getParam('action'); } |
上記に対して「/users/view/1」を実行すると下記のように表示されます。
1 2 3 4 5 6 |
view - action controller:Users action:view _view - action controller:Users action:view |
「view」アクションでも、「_view」アクションでも「action:view」が表示されます。
何をしているのか、理解できていれば当然と言えば当然の結果のような気もします。
そもそも、現在のコントローラー、アクションの情報を取得しているのではなく、リクエストの情報である「$this->request
」の値を取得しているわけなので、「_view」に移動しても「$this->request
」の値は変わらないってことですね...
ちなみに、逆に「_view」に移動したとき、その場所が「_view」であることを取得する処理があるのかどうか調べてみましたが、見つけることはできませんでした。
もしかするとないのかもしれません。
(「$this->request
」の中を見てみましたが「_view」の情報はありませんでした。)
また、コンポーネント内では「$this->request」を取得することはできませんので、コンポーネント内で「$this->request->getParam('action')
」でアクション名を取得することはできませんでした。
routes.phpでURLを変えても実際にアクセスしているアクションになる
ルーティングの設定を行う「/config/routes.php」ファイルに下記のように追記をしたとします。
1 |
$builder->connect('/sample/test01/*', ['controller' => 'Users', 'action' => 'view']); |
この場合、
https://example.com/sample/test01/1
にアクセスした場合は
https://example.com/user/view/1
にアクセスしていること同じとなり、同じ画面が表示されます。
では、この時、「getParam('controller')
」「getParam('action')
」で取得した値はどうなるでしょうか?
結果は、ルーティングをしていても実際にアクセスをしているコントローラー名、アクション名を取得します。
1 2 |
controller:Users action:view |
これはちょっと予想外で、「controller:sample」「action:test01」が取得できるのかと思っていました。
ちなみに、「sample/test01/1」を取得したい場合は下記で取得することができます。
1 |
$this->request->getUri()->getPath(); |
また、CakePHPでサーバ情報、環境情報を取得する方法については、改めて記事にしましたので、下記をご確認ください。
「CakePHP4、5で$_SERVERと同じようにURIを取得する「getUri()」の紹介」
CakePHPのコマンドではアクション名は取得出来なさそう
ブラウザで実行する画面の処理の場合は、Webリクエストとして情報を取得できますので、「$this->request->getParam('action')
」のような形で Requestオブジェクトから情報を取得することができます。
ですが、コマンドの場合は、Requestオブジェクトがないため、コントローラー名、アクション名を取得することはできなさそうです。
ですが、下記の処理によって、実行しているコマンド名を取得することはできます。
1 2 |
$this->name; $this->getName(); |
ちなみに、上記の処理を Web画面で実行すると、コントローラー名が取得できます。
また、CakePHPでのコマンド作成については下記に記事を書いていますので、こちらも参考にしてください。
「CakePHP4 でコマンドプログラム(シェルプログラム)を作成する方法解説」
「CakePHP4 のコマンドプログラムからコンポーネントを読み込む方法解説」
「CakePHP4で複数の引数(パラメータ)を付与してコマンドを実行する方法」
「Windows上のXAMPP環境のCakePHPのコマンド実行時に環境変数を指定する方法」
CakePHP5の関連記事
CakePHP4、5のユーザ認証でID、PASS以外の削除フラグなども条件加える方法CakePHP4、CakePHP5系の認証処理でログインの有無の確認、ユーザ情報の取得の方法
CakePHP4、5で$_SERVERと同じようにURIを取得する「getUri()」の紹介
getParam('action')
で取得するアクション名は別関数に移動しても不変CakePHP4系、CakePHP5系のexists()でカラムを指定して値の有無をチェックする方法解説
CakePHP4、5のnewEmptyEntityで作成したオブジェクトは空なのか、確認してみた
CakePHP4、5でSELECT telephone as tel FROM usersの様にasでカラムに別名を付ける方法
CakePHP4、5の認証処理で認証が通らない際の確認方法と確認箇所の紹介
CakePHP5系で認証機能のAuthenticationプラグインをインストール・エラー発生注意
CakePHP5でヘルパーから他のヘルパーを読み込む方法・CakePHP4からの変更点
その他の「CakePHP5」に関する記事一覧
GoogleAdwords
GoogleAdwords
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
-
CakePHP3でWarning Error: SplFileInfo::openFile()エラーが発生した場合の対処方法
CakePHP3のキャッシュファイルのパーミッションエラー Error: SplFileInfo::openFile()が発生した場合の対応方法解説。app.phpにキャッシュファイルのパーミッション設定を行い、既存のファイルは削除。
-
-
国際化と地域化の翻訳機能「__()」を使って定数に変数を埋め込む方法
CakePHP4で定数に変数を埋め込み、翻訳機能「__()」で変数に値を入れる方法を紹介。定型の文章の一部だけを置換したい場合に利用すると便利。
-
-
CakePHP3のfriendsofcake/searchでツリーカテゴリーの子階層も含めて検索する方法
CakePHP3のツリービヘイビアを使ったツリーカテゴリーの子階層も含めての検索を検索プラグイン「friendsofcake/search」を使って実現する方法を解説しました。
-
-
CakePHP4で定数の設定と呼び出し方法の解説(defineとConfigure)
CakePHP4で定数を設定、使用する方法を解説。定数定義はdefineとConfigureを使用する方法を解説。また、bootstrap.phpに直接記述する方法と別のファイルにする方法を解説。
-
-
CakePHP3でアソシエーション先のカラムでデータをソートして取得したい
アソシエーション先のテーブルのカラムをキーにソートをしたデータを取得したい!ときの記述方法を解説。「orderAsc()」ではなく「contain()」の中にSort条件を記述する。
-
-
CakePHP4で複数の引数(パラメータ)を付与してコマンドを実行する方法
CakePHP4でコマンドを実行する際に引数(パラメータ)をコマンド内で受け取る処理について解説。複数個の引数にも対応する記述方法も解説。
-
-
CakePHP4のController内でViewテンプレート、レイアウトの変更設定を記述する方法
CakePHP4でテンプレートやレイアウトファイルをデフォルトから変更する場合は「render()」を使用するが、記述場所はできるだけコントローラー内の最後の方に書く方がいい。
-
-
CakePHP4系でJSONレスポンスの処理ではwithStringBodyを使う。3との違い解説
responseの値を指定する方法は3系では「body」だが、4系では「withStringBody」になりる。加えてJSON形式なら「withType」で指定するなど4系では結構異なる処理がある。
-
-
CakePHP4のユーザ管理・ログイン認証プラグインCakeDC/Usersのインストール解説
CakePHP4のユーザ管理プラグイン Usersは、ユーザ登録、メール認証、ログイン認証、ユーザ管理、権限管理、reCAPTCHAなど会員制のサイトを簡単に実現可能。その導入方法、カスタマイズ方法を解説。
-
-
CakePHP5系でDeprecatedを回避しfindListでキーと値のカラムを指定して取得する方法
CakePHP4のfindListでキーと値のカラムを指定してテーブルにアクセスする方法がCakePHP5では「Deprecated(非推奨)」となった。推奨の記述方法を解説。