繁体   English   中英

Codeigniter,路线和404错误

[英]Codeigniter, routes and 404 error

这是我的routes.php

$route['(:any)'] = 'base/index/$1';
$route['home'] = 'base/home';
$route['operativa/(:any)'] = 'base/operativa/$1';
$route['default_controller'] = "base";
$route['404_override'] = '';

这是我的控制器,基于:

class Base extends MY_Controller {

    function __construct() {
        parent::__construct();      
        $this->load->model('filesmodel', 'files');
        $this->load->model('cestamodel', 'cesta');
    }
    public function index ($pagina = 'login')  {
        $data = array(
            'page' => $pagina,
            'logado' => false
        );
        $this->load->view('modules/top', $data);
        $this->load->view('pages/'.$pagina, $data);
        $this->load->view('modules/bottom', $data);
    }
    public function home (){
        $pagina = 'home';
        $data = array(
            'page' => $pagina,
            'logado' => true,
            'notifications' => 3
        );
        $this->load->view('modules/top', $data);
        $this->load->view('pages/'.$pagina, $data);
        $this->load->view('modules/bottom', $data);
    }
    public function operativa($tipo){
        echo 'El tipo es: '.$tipo.'<br>';
        switch ($tipo) {
            case 'nuevo_cliente':
                $pagina = $tipo;
                break;
            case 'contacto':
                $pagina = $tipo;
                break;
            case 'mensajes':
                $pagina = $tipo;
                break;
        }
        $data = array(
            'page' => $pagina,
            'logado' => true,
            'notifications' => 2
        );
        $this->load->view('modules/top', $data);
        $this->load->view('pages/operativa/'.$pagina, $data);
        $this->load->view('modules/bottom', $data);
    }
}

问题是,URL:

/operativa/nuevo_cliente

将触发404而不是回声

有什么想法我想念的吗?

PD:指数和家庭作业符合预期

问题似乎是您的URL与第一个路由匹配,因此它永远不会到达您要使用的功能。

您应该将路径从更具体的路径改写为更一般的路径,如下所示:

$route['home'] = 'base/home';
$route['operativa/(:any)'] = 'base/operativa/$1';
$route['(:any)'] = 'base/index/$1';
$route['default_controller'] = "base";
$route['404_override'] = '';

首先echo 'El tipo es: '.$tipo.'<br>'; 必须在转换语句之后。 为什么要在控制器中回显呢? 并执行if语句而不是switch。

编辑!!! 您不需要switch语句...尝试一下,看看会发生什么(仅用于测试):

public function operativa($pagina){

 if ( ! file_exists('application/views/pages/operativa/'.$pagina.'.php'))
{
    // Whoops, we don't have a page for that!
    show_404();
}
    $data = array(
            'page' => $pagina,
            'logado' => true,
            'notifications' => 2
    );
    $this->load->view('modules/top', $data);
    $this->load->view('pages/operativa/'.$pagina, $data);
    $this->load->view('modules/bottom', $data);
}

您也可以像这样更改路线的顺序:

$route['operativa/(:any)'] = 'base/operativa/$1';
$route['(:any)'] = 'base/index/$1';
$route['home'] = 'base/home';
$route['default_controller'] = "base";
$route['404_override'] = '';

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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