6

ユーザーが CakePhp を使用して自分の Web サイトのホームページにアクセスしているかどうかを検出するにはどうすればよいですか?

使っても$this->webrootいいですか?

目標は、現在のページがホームページである場合にのみ何かを行うことです。

4

7 に答える 7

10

簡単にこれを試すことができます:

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.
于 2013-08-14T09:01:57.287 に答える
4

現在のページを webroot または base と比較することで見つけることができます

if ($this->here == $this->webroot){ // this is home page }

また

if ($this->here == $this->base.'/'){ // this is home page }
于 2014-05-26T10:33:15.787 に答える
1

以下のようなパラメーターと照合することで、適切に取得できます。

if($this->params['controller']=='homes' && $this->params['action']=='index')

このようにして、ビュー側で Cakephp の任意のページを確認できます

于 2013-08-14T13:09:01.903 に答える
0

$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 => '/'
}
于 2013-08-14T08:51:10.997 に答える
0

AppController から何かをしようとしていると仮定すると、現在のコントローラー/アクションのペアが「ホームページ」として定義したものであるかどうかを確認するのが最善です (Cake はユーザーを '/' ルートからどこにでもルーティングできるため、おそらくまだ必要です) /controller/actionon だけでなく、完全な URI を使用してアクションが直接呼び出されたときにトリガーされるロジック/)。AppController にチェックを追加するだけです。

if ($this->name == 'Foo' && $this->action == 'bar') {
    // Do your stuff here, like
    echo 'Welcome home!';
}

そうすれば、barからアクションが要求されるたびにトリガーされますFooController。明らかに、このロジックを特定のコントローラー アクション自体に配置することもできます (オーバーヘッドが少ないため、より理にかなっている可能性があります)。

于 2013-08-14T08:52:23.447 に答える