2010-01-19 12 views
9

En bootstrap.php, donde estableces rutas, estoy teniendo dificultades para conseguir que funcionen. Leí un poco de documentación hace un tiempo que parece que no puedo encontrar de nuevo que los explique. Aquí está uno de mis ejemplos¿Alguien puede explicar el sistema de enrutamiento de Kohana 3?

Route::set('products', 'products/(type)', array('type' => '.+')) 
    ->defaults(array(
    'controller' => 'articles', 
    'action' => 'view_product', 
    'page' => 'shock-absorbers', 
    )); 

Yo pensé que significaría una petición como products/something podría cargar el controlador de articles, y el método action_view_product(). Pero no puedo hacer que funcione.

¿Puede alguien explicarme cómo funcionan exactamente, y cuáles son todos los parámetros del método?

Respuesta

5

pensé que eso significaría una solicitud como productos/algo iba a cargar el controlador artículos, y el controlador action_view_product. Pero I no puedo hacer que funcione.

Tiene la parte en negrita incorrecta. En realidad, se cargará action_view_product método del controlador artículos:

class Controller_Articles extends Controller { 
    public function action_view_product() { 
     $params = $this->request->param(); 
     // if the uri is `products/something' then $params['type'] == 'something' 
    } 
} 

EDIT:

Oh mi dios oh dios sus ¿Por qué no noto !!!

¡El problema real se encuentra dentro de su patrón de ruta! Debería haber sido products/(<type>), con los corchetes angulares. Esos indicarán a Kohana que tu intención es que el 'tipo' sea un nombre de parámetro, en lugar de un literal.

+0

Lo siento, eso fue un error! Todavía no puedo lograr que funcione para mí. – alex

+0

¿Pusiste tu controlador php en la carpeta correcta? – Lukman

+0

Sí, tengo una ruta predeterminada que está capturando todo (y funciona bien) – alex

3

uff, lo siento, entonces baja y mayor que no muestra signos correctamente hace

'products/(type)' should be 'products/(<type>)' 
+0

o mejor aún: ''producto (/ )' ', porque de lo contrario' producto '(sin barra) no se correspondería (aunque es posible que desee de esa manera) – giorgio

3

Los paréntesis indican partes opcionales (la expresión regular coincidirá si se han perdido). Estos pueden ser estáticos y/o contener variables nombradas. Los paréntesis angulares indican una variable llamada en la ruta que se puede acceder en el controlador a través de:

$this->request->param('type'); 

escribí la guía oficial de enrutamiento que se puede leer here, debe responder todas sus preguntas.

0

Para el registro:

El directorio, controlador y la acción se puede acceder desde la solicitud como bienes de dominio público, así:

// From within a controller: 
$this->request->action; 
$this->request->controller; 
$this->request->directory; 

// Can be used anywhere: 
Request::instance()->action; 
Request::instance()->controller; 
Request::instance()->directory; 

fuente: http://kohanaframework.org/3.0/guide/kohana/routing#request-parameters

Cuestiones relacionadas