[英]Codeigniter form_open 404
经过几个小时的搜索,我仍然不知道为什么在执行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'] = '';
route.php:
$route['(:any)'] = "pages/view/$1";
$route['default_controller'] = "pages/view";
$route['404_override'] = '';
此配置有什么问题?
您遇到的问题与以下路由有关(我假设您已发布了整个路由文件):
$route['(:any)'] = "pages/view/$1";
这意味着您加载的任何文件都将转到页面控制器,调用函数视图,然后传入参数$ 1。 在这种情况下,它将通过'pages / login_validation'或'login_validation'(我不确定是哪一个,而且目前无法测试。)
您的视图功能正在检查文件'application / view / pages / login_validation.php'或'application / view / pages / pages / login_validation.php'是否存在,当找不到时,它会给出404页。
要解决此问题,您可以将以下内容添加到routes.php文件中(在$route[(:any)] = 'pages/view/$1';
行上方):
$route['pages/login_validation'] = 'pages/login_validation';
这将显式检查要加载的页面是否为login_validation之一,然后在页面控制器内调用该函数。
如果不想每次都添加路由,则可以在页面中修改视图函数,以检查$page
变量是否与函数名称匹配,如果匹配,则调用该函数:
if (function_exists($page))
{
$page();
}
这样可能带来的麻烦是,您将无法轻易将其他参数传递给给定页面。 您可能还会不小心将页面命名为与PHP中的函数相同的名称,然后它将尝试调用该页面,而不是加载您想要的页面。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.