如何使用 CakePhp 检测用户是否在我网站的主页上?
我可以用$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
URI 而不仅仅是 on调用操作时要触发的逻辑/
。在您的 AppController 中添加一个检查:
if ($this->name == 'Foo' && $this->action == 'bar') {
// Do your stuff here, like
echo 'Welcome home!';
}
这样,每当bar
从FooController
. 您显然也可以将此逻辑放在特定的控制器操作本身中(这可能更有意义,因为它的开销更少)。
如果您的主页是 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();
}
}
我实现这一目标的方法是使用$this->params
. 如果您使用print_r($this->params);
,您将看到该变量的内容。它将返回一个数组。您将看到您在主页时与不在主页时的区别。您将不得不使用其中一个键$this->params
来通过声明进行评估if
。我就是这样实现的。也许您会发现这种方法也很有用。