如何检测当前页面是否是CakePhp的主页?

时间:2013-08-14 08:08:26

标签: php cakephp cakephp-2.0

如何通过CakePhp检测用户是否在我网站的主页上?

我可以使用$this->webroot吗?

目标是仅在当前页面是主页时执行某些操作。

7 个答案:

答案 0 :(得分:10)

您可以试试这个:

if ($this->request->here == '/') {
       // some code
}

同样最好阅读documentation的这一部分:

  

你可以使用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.

答案 1 :(得分:4)

您可以通过将当前页面与webroot或base

进行比较来找到它
if ($this->here == $this->webroot){ // this is home page }

OR

if ($this->here == $this->base.'/'){ // this is home page }

答案 2 :(得分:0)

您可以使用$ this-> request-> query ['page']来确定您的位置,

if ( $this->request->query['page'] == '/' ){
   //do something
}

编辑:

使用echo debug($ this-> request)检查$ this->请求对象,它包含许多可以使用的信息。以下是您获得的样本:

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 => '/'
}

答案 3 :(得分:0)

假设你要从AppController做一些事情,最好看看当前的控制器/动作对是否是你定义为“主页”的那个(因为Cake可以将用户路由到'/'路线的任何地方而你可能仍然希望在使用完整的/controller/action URI直接调用操作时触发逻辑,而不是仅在/上调用。在你的AppController中只需添加一个支票:

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

这样,只要bar请求FooController操作,它就会触发。显然,您也可以将此逻辑放在特定的控制器操作本身中(这可能更有意义,因为它的开销更小)。

答案 4 :(得分:0)

你可以通过检查下面的参数来正确地得到它:

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

通过这种方式,您可以在视图侧检查cakephp的任何页面

答案 5 :(得分:0)

如果你的主页是cake.ctp,正如cakePHP约定所提到的那样。在PagesController中,您可以将显示功能更改为:

(添加的代码从评论/ *自定义代码开始* /)

开始
public function display()
{
    $path = func_get_args();

    $count = count($path);
    if (!$count) {
        return $this->redirect('/');
    }
    $page = $subpage = null;

    if (!empty($path[0])) {
        $page = $path[0];
    }
    if (!empty($path[1])) {
        $subpage = $path[1];
    }
    /* Custom code start*/
    if("home"==$page){
        // your code here
    }
    /* Custom code end*/
    $this->set(compact('page', 'subpage'));

    try {
        $this->render(implode('/', $path));
    } catch (MissingTemplateException $e) {
        if (Configure::read('debug')) {
            throw $e;
        }
        throw new NotFoundException();
    }
}

答案 6 :(得分:0)

我实现这一目标的方法是使用$this->params。如果使用print_r($this->params);,将为您看到该变量的内容。它将返回一个数组。您会发现自己在首页与不在首页时的区别。您将必须使用$this->params中的键之一通过if语句进行评估。那就是我实现它的方式。也许您也可以找到这种方法。