route - rutas en codeigniter
¿Cómo enrutar 2 parámetros a un controlador? (3)
Esto parece realmente básico pero no puedo entenderlo.
Estoy intentando enviar más de un parámetro a un método en el controlador, como este:
http://localhost/ci/index.php/subjects/3/state
Estas son las rutas que he probado:
$route[''subjects/(:num)''] = ''subjects/view/$1'';
$route[''subjects/(:num)/{:any}''] = ''subjects/view/$1/$2'';
El método acepta 2 parámetros:
public function view($slug, $id = null){
}
pero parece que obtengo un 404. ¿Cómo puedo hacer que esto funcione? Necesito el método de visualización para aceptar siempre 1 parámetro y otros parámetros opcionales.
NOTA : Estoy incluyendo el ayudante de url.
Siempre mantenga sus reglas de enrutamiento
me gusta
$route[''subjects/(:num)/(:any)/(:any)/(:any)''] = ''subjects/view/$1/$2/$3/$4'';
$route[''subjects/(:num)/(:any)/(:any)''] = ''subjects/view/$1/$2/$3'';
$route[''subjects/(:num)/(:any)''] = ''subjects/view/$1/$2'';
Siempre siga este patrón de enrutamiento
si añades asi
$route[''subjects/(:num)/(:any)''] = ''subjects/view/$1/$2'';
$route[''subjects/(:num)/(:any)/(:any)/(:any)''] = ''subjects/view/$1/$2/$3/$4'';
$route[''subjects/(:num)/(:any)/(:any)''] = ''subjects/view/$1/$2/$3'';
entonces siempre la primera condición será verdadera cada vez.
Consulte también este enlace -> reglas de enrutamiento de codeigniter
Una vez probé este patrón URI
$route[''(:any)''] = ''welcome/list1/$1'';
$route[''(:any)/(:num)''] = ''welcome/list1/$1/$2'';
$route[''(:any)/(:any)''] = ''welcome/list2/$1/$2'';
$route[''(:any)/(:any)/(:num)''] = ''welcome/list2/$1/$2/$3'';
$route[''(:any)/(:any)/(:any)''] = ''welcome/list3/$1/$2/$3'';
pero no funcionó ... así que lo reemplacé con una expresión regular
([az 0-9 -]+)
reemplazado (:any)
y ([0-9]+)
reemplazado (:num)
así se convirtió
$route[''([a-z 0-9 -]+)''] = ''welcome/list1/$1'';
$route[''([a-z 0-9 -]+)/([0-9]+)''] = ''welcome/list1/$1/$2'';
$route[''([a-z 0-9 -]+)/([a-z 0-9 -]+)''] = ''welcome/list2/$1/$2'';
$route[''([a-z 0-9 -]+)/([a-z 0-9 -]+)/([0-9]+)''] = ''welcome/list2/$1/$2/$3'';
$route[''([a-z 0-9 -]+)/([a-z 0-9 -]+)/([a-z 0-9 -]+)''] = ''welcome/list3/$1/$2/$3'';
Y funcionó para mí :)
tiene problemas con los paréntesis de su ruta, simplemente cambie de {} a () los corchetes funcionarán
desde
$route[''subjects/(:num)/{:any}''] = ''subjects/view/$1/$2'';
a
$route[''subjects/(:num)/(:any)''] = ''subjects/view/$1/$2'';