2013-11-26 2 views
0

это мой routes.phpCodeIgniter, маршруты и 404 ошибки

$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 

Will огонь 404 вместо эха

An y идея, которую я пропускаю?

PD: индекс и работа на дому, как ожидается,

ответ

1

проблема заключается в том, что ваш URL-адрес соответствует первому маршруту, поэтому он никогда не добирается до функции, которую вы хотите, чтобы она шла.

Вы должны переписать свои маршруты из более характерных для более общего, например, так:

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

Но не следует ли это сопоставлять, по крайней мере, с помощью '(: any)/(: any)' ?? –

+0

вы имеете в виду «operativa/(: any)»? Если это так, нет, потому что он сначала будет соответствовать «(: any)», а затем прекратит обработку правил. –

0

Прежде всего echo 'El tipo es: '.$tipo.'<br>'; должны быть после переключателя даного. И почему вы повторяете это в своем контроллере? И сделайте, если статут вместо переключателя.

+0

Я просто хочу знать, если функция выполняется, его для отладки, но; Как я комментирую в своем ответе, вместо 404 вызывается –

+0

Это ваш контроллер по умолчанию? – Chiribuc

+0

Да, отредактированы последние 2 строки –

0

EDIT !!! Вам не нужно переключатель Постулаты ... Попробуйте это и посмотреть, что происходит (только для тестирования):

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'] = ''; 
+0

Его упрощенная версия моего кода мне понадобится позже ... в любом случае простое эхо не произойдет ... Я думаю, что проблема в моих маршрутах? –

Смежные вопросы