【发布时间】:2017-12-21 00:54:22
【问题描述】:
我在我的代码点火器应用程序中定义了一个钩子,用于根据加载的控制器加载语言。
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
/*
| -------------------------------------------------------------------------
| Hooks
| -------------------------------------------------------------------------
| This file lets you define "hooks" to extend CI without hacking the core
| files. Please see the user guide for info:
|
| https://codeigniter.com/user_guide/general/hooks.html
|
*/
$hook['post_controller_constructor'] = array(
'class' => 'LanguageLoader',
'function' => 'initialize',
'filename' => 'LanguageLoader.php',
'filepath' => 'hooks'
);
这就是 LanguageLoader.php 的样子
<?php
class LanguageLoader
{
function initialize() {
$ci =& get_instance();
$class = $ci->router->class;
$class = strtolower($class);
$ci->load->helper('language');
$ci->load->library('session');
if(!$ci->session->has_userdata('language')){
$ci->session->set_userdata('language','english');
$ci->session->set_userdata('language_remaining','spanish');
}
$ci->lang->load($class,$ci->session->userdata('language'));
$ci->lang->load('dashboard',$ci->session->userdata('language'));
}
}
这样做的问题是,如果我访问一个不存在的控制器的 URL,它只会抛出找不到语言文件而不是抛出 404 错误。如果我将钩子更改为预控制器,我应该得到 404 错误,但是在使用存在的控制器时语言文件不会自动加载。
解决此问题的首选方法是什么?检查一下控制器是否存在于钩子中?还是我唯一希望手动加载我的语言文件?
谢谢
【问题讨论】:
-
尝试重命名它,所以只有第一个字母是大写的 Languageloader 类和文件名
-
你尝试过其他的钩子点吗?
-
@Tpojka 是的,后控制器构造函数是唯一合适的。
-
@wolfgang1983 这无济于事,因为我所有的语言文件都以完整的小写字母命名。我也不确定你的意思是什么
标签: php codeigniter controller http-status-code-404 hook