rutas route base_url codeigniter codeigniter-2 codeigniter-url codeigniter-routing

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'';