繁体   English   中英

Codeigniter form_open 404

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM