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