它为什么吹过第一个?

时间:2013-02-20 21:41:39

标签: php foreach require-once

我构建了一个函数,如果你给它一个路径数组,它将在每个路径中查找一个文件,如果你给它一个路径的数组,它将只在文件的路径中查找。

我的问题是,当你给它一系列路径时,例如:

$array = array(
    'template_view_paths' => array(
        'path_name' => some/path/
        'path_name_two' => some/path/two/
    )
)

似乎在some/path/中找到该文件,但继续some/path/two/并且因为该文件不存在而吓坏了。如果它在任何路径中找到它停止在其他路径中查找的文件,我将需要更改哪些内容?

代码 - 未重新计算

public function render_view($template_name){
    if(!isset($this->_options['template_view_path'])){
        throw new AisisCore_Template_TemplateException('Not view path was set.');
    }

    if(is_array($this->_options['template_view_path'])){
        foreach($this->_options['template_view_path'] as $template=>$path){
            require_once($path . $template_name . '.phtml');
        }
    }else{
        if(!file_exists($this->_options['template_view_path'] . $template_name . '.phtml')){
            throw new AisisCore_Template_TemplateException('Could not find: ' . $template_name . '.phtml at ' . $path);
        }

        require_once ($this->_options['template_view_path'] . $template_name . '.phtml');
    }
}

注意: 要关注的部分是if(is_array()){}循环

1 个答案:

答案 0 :(得分:0)

不应:

if(is_array($this->_options['template_view_path'])){
    foreach($templates as $template=>$path){
        require_once($path . $template_name . '.phtml');
    }
}else{

是:

if(is_array($this->_options['template_view_path'])){
    foreach($this->_options['template_view_path'] as $template=>$path){
        if (file_exists($filename = $path . $template_name . '.phtml')) {
            require_once($filename);
            return;
        }
    }

    throw new AisisCore_Template_TemplateException('Could not find: ' . $template_name . '.phtml in any paths');
}else{

你永远不会实际循环$this->_options['template_view_path']