ユーザーが CakePhp を使用して自分の Web サイトのホームページにアクセスしているかどうかを検出するにはどうすればよいですか?
使っても$this->webroot
いいですか?
目標は、現在のページがホームページである場合にのみ何かを行うことです。
ユーザーが CakePhp を使用して自分の Web サイトのホームページにアクセスしているかどうかを検出するにはどうすればよいですか?
使っても$this->webroot
いいですか?
目標は、現在のページがホームページである場合にのみ何かを行うことです。
簡単にこれを試すことができます:
if ($this->request->here == '/') {
// some code
}
また、ドキュメントのこの部分を読むこともお勧めします:
CakeRequest を使用して、リクエストに関するさまざまなことを調べることができます。検出器を超えて、さまざまなプロパティとメソッドから他の情報を見つけることもできます。
$this->request->webroot contains the webroot directory. $this->request->base contains the base path. $this->request->here contains the full address to the current request $this->request->query contains the query string parameters.
現在のページを webroot または base と比較することで見つけることができます
if ($this->here == $this->webroot){ // this is home page }
また
if ($this->here == $this->base.'/'){ // this is home page }
以下のようなパラメーターと照合することで、適切に取得できます。
if($this->params['controller']=='homes' && $this->params['action']=='index')
このようにして、ビュー側で Cakephp の任意のページを確認できます
$this->request->query['page'] を使用して、現在の場所を特定できます。
if ( $this->request->query['page'] == '/' ){
//do something
}
編集:
echo debug($this->request) を使用して $this->request オブジェクトを確認すると、使用できる多くの情報が含まれています。これはあなたが得るもののサンプルです:
object(CakeRequest) {
params => array(
'plugin' => null,
'controller' => 'pages',
'action' => 'display',
'named' => array(),
'pass' => array(
(int) 0 => 'home'
)
)
data => array()
query => array()
url => false
base => ''
webroot => '/'
here => '/'
}
AppController から何かをしようとしていると仮定すると、現在のコントローラー/アクションのペアが「ホームページ」として定義したものであるかどうかを確認するのが最善です (Cake はユーザーを '/' ルートからどこにでもルーティングできるため、おそらくまだ必要です) /controller/action
on だけでなく、完全な URI を使用してアクションが直接呼び出されたときにトリガーされるロジック/
)。AppController にチェックを追加するだけです。
if ($this->name == 'Foo' && $this->action == 'bar') {
// Do your stuff here, like
echo 'Welcome home!';
}
そうすれば、bar
からアクションが要求されるたびにトリガーされますFooController
。明らかに、このロジックを特定のコントローラー アクション自体に配置することもできます (オーバーヘッドが少ないため、より理にかなっている可能性があります)。