搜索了几个小时之后,我仍然无法理解为什么在执行form_submit时出现404错误。
我的控制器看起来像这样:
class pages extends CI_Controller{
function view($page = 'home'){
$this->load->helper('url');
if(!file_exists('application/views/pages/'.$page.'.php')){
show_404();
}
$data['title'] = $page;
$this->load->view('templates/view',$data);
}
public function login_validation(){
}
查看页面:
<?php echo form_open('pages/login_validation');
echo form_input(array(
'name' => 'firstname',
'placeholder' => 'Voornaam',
'class' => 'form-control input-lg',
'tapindex' => '1'
));
echo form_submit(array(
'name' => 'login_submit',
'value' => 'Register',
'class' => 'btn btn-primary'
));?>
.htaccess(在根文件夹中):
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond $1 !^(index\.php|indexcp\.php?|resources|robots\.txt)
RewriteRule ^([A-Za-z0-9_/.-]+)$ index.php?/$1
我在autoload.php中有这一行:
$autoload['helper'] = array('form','url');
在config.php中:
$config['base_url'] = 'http://localhost/';
$config['index_page'] = '';
routes.php文件:
$route['(:any)'] = "pages/view/$1";
$route['default_controller'] = "pages/view";
$route['404_override'] = '';
此配置有什么问题?
答案 0 :(得分:1)
您遇到的问题是以下路线(我假设您已经发布了整个路线文件):
$route['(:any)'] = "pages/view/$1";
这意味着您加载的任何文件都将转到页面控制器,调用函数视图,并传入$ 1参数。在这种情况下,它将通过&#39; pages / login_validation&#39;或者&#39; login_validation&#39; (我不是100%确定哪一个,我现在无法测试。
您的查看功能正在检查文件&#39; application / view / pages / login_validation.php&#39;或者&#39; application / view / pages / pages / login_validation.php&#39;存在,当它无法找到它时,就会给出404页面。
要解决此问题,您可以将以下内容添加到routes.php文件中($route[(:any)] = 'pages/view/$1';
行上方):
$route['pages/login_validation'] = 'pages/login_validation';
这将明确检查想要加载的页面是否为login_validation,然后在页面控制器中调用该函数。
如果您不想每次都添加路由,那么您可以修改页面中的视图功能以检查$page
变量是否与函数名称匹配,如果是,则调用功能:
if (function_exists($page))
{
$page();
}
您可能遇到的麻烦是,您无法轻松地将其他参数传递到给定页面。您可能也会意外地将页面命名为与PHP中的函数相同,然后它会尝试调用它而不是加载您想要的页面。