Я пытаюсь проверить, действительно ли существует файл представления в соответствии с загруженными путями сторонних разработчиков.
Обычно я проверял бы, существует ли представление с помощью is_file(APPPATH.'/views/folder/'.$view)
Я могу получить все загруженные сторонние пути с помощью get_package_paths (спасибо комментарий Tpojka), а затем проверьте в своих папках, существует ли файл,
но я надеялся на "прямую" проверку, как если бы функция ->view
вернула false
вместо перенаправления на страницу с ошибкой
$html = $this->load->view($tpl,'',TRUE) ? $this->load->view($tpl,'',TRUE) : $another_template;
Хотя я понимаю, что может не быть других решений, которые добавляют эту ручную проверку с циклом через загруженные пути и скрывают ее в расширении класса CI_Load (application/core/MY_Loader), чтобы создать видимость прямой проверки в контроллере:
РЕДАКТИРОВАТЬ: Это плохая идея, потому что view() может возвращать false
в функцию CI, которая может быть не предназначена для
class MY_Loader extends CI_Lodaer{
public function __construct() {
parent::__construct();
}
public function view($view, $vars = array(), $return = FALSE)
{
foreach( $this->get_package_paths( TRUE ) as $path )
{
// this will only retrieve html from the first file found
if( is_file( $path."/views/".$view ) ) return parent::view($view, $vars, $return);
}
// if no match
return false;
}
}
Что меня раздражает, так это то, что load->view уже выполняет проверку путей, поэтому это решение добавит вторую проверку и увеличит потребление сервера.
is_file($file)
. Вы хотите загрузить файл пакета, если он существует, или файл основного вида, если файл пакета не существует? - person Tpojka   schedule 06.06.2016