エス技研

WordPress、CakePHP、PHP、baserCMSなどの Web系システムを中心に情報を提供します!


getParam('action')で取得するアクション名は別関数に移動しても不変

      2025/03/23

getParam('action')で取得するアクション名は別関数に移動しても不変

 
CakePHP4系、CakePHP5系では、現在実行中のコントローラー名、アクション名を取得する際は下記のように取得します。
 

 
CakePHP3系ではいろいろな取得方法がありましたが、CakePHP4系、CakePHP5系では上記の「getParam()」メソッドを使う方法に集約されました。
下記に、そのような解説記事を書いていますので、詳しく知りたい方は下記を読んでください。
 
CakePHP3で現在処理しているコントローラー名、アクション名を取得する方法
CakePHP4で現在処理しているコントローラー名、アクション名を取得する方法
 
また、上記の記事で紹介する「getParam()」メソッドを使って、コントローラー名やアクション名を取得する方法ですが、コントローラ内でも使えますし、ビュー(テンプレート)内でも同じ記述方法で取得することができます。
 
覚えておくと非常に便利に利用することができます。
 
 

アクションから別の関数に遷移したときの「getParam('action')」の結果は?

 
この記事では、それらの前提を踏まえたうえで
ブラウザで「A」というアクションにアクセスします。
その「A」の処理の中で、「B」という関数を呼び出して処理をするとします。
その「B」の中で「getParam('action')」を使用すると、その結果は「A」なのか「B」なのか、分かりますか?
という内容です。
 
正解は「A」です。
 
 
結論だけでいい方はここで終了でいいかと思います。
 
具体的な検証方法を説明しながら解説をしていきます。
 
 

getParam('action')」でアクション名を取得する処理

 
「UsersController.php」の中に下記のアクションの処理があるとします。
 

 
上記に対して「/users/view/1」を実行すると下記のように表示されます。
 

 
「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」ファイルに下記のように追記をしたとします。
 

 
この場合、
 https://example.com/sample/test01/1
にアクセスした場合は
 https://example.com/user/view/1
にアクセスしていること同じとなり、同じ画面が表示されます。
 
では、この時、「getParam('controller')」「getParam('action')」で取得した値はどうなるでしょうか?
 
結果は、ルーティングをしていても実際にアクセスをしているコントローラー名、アクション名を取得します。
 

 
これはちょっと予想外で、「controller:sample」「action:test01」が取得できるのかと思っていました。
 
ちなみに、「sample/test01/1」を取得したい場合は下記で取得することができます。
 

 
 
また、CakePHPでサーバ情報、環境情報を取得する方法については、改めて記事にしましたので、下記をご確認ください。
CakePHP4、5で$_SERVERと同じようにURIを取得する「getUri()」の紹介
 
 

CakePHPのコマンドではアクション名は取得出来なさそう

 
ブラウザで実行する画面の処理の場合は、Webリクエストとして情報を取得できますので、「$this->request->getParam('action')」のような形で Requestオブジェクトから情報を取得することができます。
 
ですが、コマンドの場合は、Requestオブジェクトがないため、コントローラー名、アクション名を取得することはできなさそうです。
 
ですが、下記の処理によって、実行しているコマンド名を取得することはできます。
 

 
ちなみに、上記の処理を Web画面で実行すると、コントローラー名が取得できます。
 
 
また、CakePHPでのコマンド作成については下記に記事を書いていますので、こちらも参考にしてください。
 
CakePHP4 でコマンドプログラム(シェルプログラム)を作成する方法解説
CakePHP4 のコマンドプログラムからコンポーネントを読み込む方法解説
CakePHP4で複数の引数(パラメータ)を付与してコマンドを実行する方法
Windows上のXAMPP環境のCakePHPのコマンド実行時に環境変数を指定する方法
 
 

CakePHP5の関連記事

CakePHPのpostlinkで生成した削除リンクをクリックしても処理が実行されない対処法
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」に関する記事一覧
 
 

 - CakePHP 3.x 4.x 5.x

GoogleAdwords

GoogleAdwords

最後までお読みいただきましてありがとうございます。
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!

Message

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

下記の空欄を埋めてください。 * Time limit is exhausted. Please reload CAPTCHA.

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

※入力いただいたコメントは管理者の承認後に掲載されます。

  関連記事

CakePHP4のCakeDC/Usersのログイン時のリダイレクトとユーザ権限管理の設定解説
CakePHP4のCakeDC/Usersのログイン時のリダイレクトとユーザ権限管理の設定解説

CakeDC謹製UsersプラグインのCakePHP4版の紹介。ログイン認証後にリダイレクトする先の設定方法についての解説と実運用するために必要なコツを解説。便利な仕組みも仕様の理解があって初めてうまく使いこなせる。

CakePHP3のCakeDC/Usersのバリデーションのカスタマイズ方法解説
CakePHP3のCakeDC/Usersのバリデーションのカスタマイズ方法解説

CakeDC謹製Usersプラグインの紹介。Usersのカスタマイズとして入力項目のバリデーションの変更を、プラグインのファイルは触らずオーバーライドにより実装する方法を解説する。

CakePHP3でシェルを作成しコマンドラインから実行・CakePHP2との違い
CakePHP3でシェルを作成しコマンドラインから実行・CakePHP2との違い

CakePHP3のシェルスクリプトを作成し、コマンドラインから実行する方法を解説。複数単語をつなげる場合の対応方法がCakePHP2より制限が厳しくなったのでCakePHP3の命名規則の確認が必要だ。

CakePHP3のCakeDC/Users、Authでログインなしでもアクセスを許可する設定
CakePHP3のCakeDC/Users、Authでログインなしでもアクセスを許可する設定

CakePHP3の Authコンポーネントや CakeDC/Usersプラグインなどを利用したユーザ管理・認証システムにおいて、ログインしていなくても見ることができるページの設定方法を解説。

CakePHP4、5のユーザ認証でID、PASS以外の削除フラグなども条件加える方法
CakePHP4、5のユーザ認証でID、PASS以外の削除フラグなども条件加える方法

CakePHP4系、5系ではAuthenticationを使用してログイン認証を行う。その認証でID、PASS以外の削除フラグなどの条件を加えたいときの対応方法について解説。

CakePHP4のcake cache clear_allでPermission deniedはパーミッションの変更が必要
CakePHP4のcake cache clear_allでPermission deniedはパーミッションの変更が必要

CakePHP4でキャッシュをクリアするコマンドcake cache clear_allでPermission deniedのエラーが出るのはcakeにパーミッションが足りないとき。その対処方法を解説。

CakePHP3のInsert On Duplicate Key Update(upsert)構文を解説・バルク処理も
CakePHP3のInsert On Duplicate Key Update(upsert)構文を解説・バルク処理も

CakePHP3で Insert … On Duplicate Key Update構文(upsert)を実行する方法を解説。バルク処理の方法も用意されているため大量処理の場合も対応可能。

VirtualBoxにCakePHP3を設置。必要なCentOS、Apache、PHP、MySQL、Composerをインストールし設定する。
VirtualBoxにCakePHP3を設置。必要なCentOS、Apache、PHP、MySQL、Composerをインストールし設定する

VirtualBoxにCentOS、Apache、MySQL、PHPをインストールするところから初めてCakePHP3の開発環境を構築する手順を詳細解説。この記事1つで全ての設定が完了する。

CakePHP3のビューで受取ったテーブルのオブジェクトを連想配列に変換する方法
CakePHP3のビューで受取ったテーブルのオブジェクトを連想配列に変換する方法

コントローラーからビューに送ったテーブルのオブジェクトを連想配列に変換し、ビューの中で自由に使えるようにするメソッド「toArray()」の解説。連想配列に変換できれば利用度アップ!

CakePHPで Auto Incrementを外すと Duplicate entry '0' for keyのエラーが出るかも
CakePHPで Auto Incrementを外すと Duplicate entry ‘0’ for keyのエラーが出るかも

CakePHPでAuto Incrementの設定を変更したときに「Duplicate entry ‘0’ for key」のエラーが出た。原因はModel内で IDを編集する処理の追加を忘れていたからだった。