6

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

我可以用$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/actionURI 而不仅仅是 on调用操作时要触发的逻辑/。在您的 AppController 中添加一个检查:

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

这样,每当barFooController. 您显然也可以将此逻辑放在特定的控制器操作本身中(这可能更有意义,因为它的开销更少)。

于 2013-08-14T08:52:23.447 回答
0

如果您的主页是 cakePHP 约定所提到的 home.ctp。在 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();
    }
}
于 2017-03-20T02:56:52.147 回答
0

我实现这一目标的方法是使用$this->params. 如果您使用print_r($this->params);,您将看到该变量的内容。它将返回一个数组。您将看到您在主页时与不在主页时的区别。您将不得不使用其中一个键$this->params来通过声明进行评估if。我就是这样实现的。也许您会发现这种方法也很有用。

于 2019-10-11T02:09:07.153 回答