如何通过CakePhp检测用户是否在我网站的主页上?
我可以使用$this->webroot
吗?
目标是仅在当前页面是主页时执行某些操作。
答案 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
语句进行评估。那就是我实现它的方式。也许您也可以找到这种方法。