Codeigniter form_open 404

时间:2015-07-08 10:16:06

标签: php forms .htaccess codeigniter

搜索了几个小时之后,我仍然无法理解为什么在执行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'] = '';

此配置有什么问题?

1 个答案:

答案 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中的函数相同,然后它会尝试调用它而不是加载您想要的页面。