2013-11-26 3 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 

윌 에코 대신 화재 404

An 나는 아이디어가 내가 놓친거야?

은 PD : 지수와 집에 일이 echo 'El tipo es: '.$tipo.'<br>';이 switch 문 이후 여야 모두의

답변

1

:

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); 
} 

당신은이 같은 경로의 순서를 변경할 수 있습니다 문제는 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)/(: any)'와 일치하지 않아야합니까? ?? –

+0

당신은 "operativa/(: any)"를 의미합니까? "그렇다면"아니오, 왜냐하면 "(: any)"와 먼저 일치하고 처리 규칙을 중단하기 때문입니다. –

0

먼저 예상대로. 그리고 왜 이것을 컨트롤러에 표시합니까? 스위치 대신 if 문장을 사용하십시오.

+0

난 그냥 기능을 실행하면 알고 싶어 그 디버깅 목적으로 만; 내가 내 대답에 댓글로 404 대신 해고 된 –

+0

이것은 기본 컨트롤러입니까? – Chiribuc

+0

은 예, 그래서 내가 nuevo_cliente 당신의 링크가이 것을 gues 지난 2 개 라인 –

0

EDIT !!! 당신합니다 ... switch 문을 필요로이 시도하고 (단지 테스트를 위해) 무슨 일이 일어 나는지하지 않습니다

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

내 코드의 간소화 된 버전이므로 필히 필요할 것입니다. 나중에 .. 어쨌든, 간단한 에코는 발생하지 않을 것입니다 ... 문제가 내 경로에있는 것 같습니까? –