View Cakephp:检查视图元素是否存在

View Cakephp:检查视图元素是否存在,view,cakephp-1.3,element,View,Cakephp 1.3,Element,是否有方法检查视图中是否存在元素? 我想根据它所属的类别加载不同的元素,但并非所有类别都有对应的元素…在控制器中设置元素名称: $default_element = 'my_element'; $element = 'my_cat_element'; if ($this->theme) { $element_path = APP . 'views' . DS . 'themed' . DS . $this->theme . 'elements' . DS . $element

是否有方法检查视图中是否存在元素?
我想根据它所属的类别加载不同的元素,但并非所有类别都有对应的元素…

在控制器中设置元素名称:

$default_element = 'my_element';
$element = 'my_cat_element';

if ($this->theme) {
   $element_path = APP . 'views' . DS . 'themed' . DS . $this->theme . 'elements' . DS . $element . DS . $this-ext;
} else {
   $element_path = APP . 'views' . DS . 'elements' . DS . $element . $this-ext;
}
if (!file_exists($element_path)) {    
   $element = $default_element;
}

通过从控制器发出通知,您始终可以“按需”加载特定于类别的元素。例如:

Within Controller Action:  
$this->set('elementPath', "directory_name/$categoryName");

视图中的
(也可以在布局中尝试):
事实上,实现这一目标还有其他途径。如果要在布局中加载元素,则可以从视图本身指定上面显示的set()方法。或者,它甚至可以从url参数获取,如:

Within the View or Layout:
<?php
$elementPath = $this->params['url']['category']; // note that the param array can vary according how you set the url; see http://book.cakephp.org/#!/view/963/The-Parameters-Attribute-params
echo $this->element($elementPath);
?>
视图或布局中的

当然,您必须始终指定,但检查文件是否存在也是如此。

从CakePHP 2.3版开始,您可以使用视图的
elementExists
方法:

if($this->elementExists($name)) { ... }
在旧版本的2.x中,您可以执行以下操作:

if($this->_getElementFilename($name)) { ... }
但遗憾的是,在版本1.3中,唯一的方法似乎是了解完整路径并执行以下操作:

if(file_exists($path . 'elements' . DS . $name . $ext)) { ... }
这就是他们在1.3源代码中所做的,但是从各种插件获取
$path
并检查每个路径会有一些复杂性。(请参阅下面的链接。)

资料来源:


我试图从controller调用此功能,但在版本2中不起作用。4@MohamadAli
elementExists()
是一个视图方法,因此不应从控制器中调用。@drmonkeynija在呈现视图之前我需要检查如何从控制器中检查它?目前我使用try/catch@MohamadAli这应该是一个更容易回答的问题。共享该链接,我将尝试为您回答它。:-)@MonkeyNinja博士,请你检查一下这个问题好吗?
if(file_exists($path . 'elements' . DS . $name . $ext)) { ... }