Pregunta

es mi primer post aquí:)

Estoy teniendo algunas dificultades con tratar con las direcciones URL y los parámetros. He pasado a través de la documentación de la API clase de router una y otra vez y no encontré nada útil.

En primer lugar, me gustaría saber si hay cualquier formato 'universal' en CakePHP (1.3) para el manejo de URLs. Actualmente estoy manejando todas las URL de mi como matrices simples (en el formato que el Router :: url y $ html-> Enlace accepta) y es fácil siempre que sólo tengo que pasarlos como argumentos a los métodos propios de la torta. Por lo general se complica si necesito algo más.

Principalmente estoy teniendo problemas con la conversión de las direcciones URL de cadena en el formato básico matriz. Digamos que yo quiero convertir $ arrayUrl a cuerda y de nuevo en url:

$arrayUrl=array('controller'=>'SomeController','action'=>'someAction','someValue');
$url=Router::url($arrayUrl);       //$url is now '/path/to/site/someController/someAction/someValue'
$url=Router::normalize($url);      //remove '/path/to/site'
$parsed=Router::parse($url);       /*$parsed is now
Array(
    [controller] => someController
    [action] => someAction
    [named] => Array()
    [pass] => Array([0] => someValue)
    [plugin] => 
) */

Esto parece una gran cantidad de código para hacer algo tan simple como para convertir entre formatos de 2 núcleos. Asimismo, cabe destacar que $ Analizada todavía no está en el mismo que $ arrayUrl. Por supuesto que podría ajustar manualmente $ analizada y, de hecho lo he hecho un par de veces como un parche rápido, pero me gustaría llegar al fondo de esto.

I también notado que cuando se utiliza el enrutamiento prefijo, $ this-> params en controlador tiene el prefijo incrustado en la acción (es decir. [Acción] => 'admin_edit') y el resultado de Router :: parse () no. Ambos, por supuesto, tienen el prefijo en su propia clave.

En resumen, ¿cómo puedo convertir una URL entre cualquiera de estos 3 (o 4, si se incluye el prefijo cosa) formatos menciona la manera correcta? Por supuesto que sería fácil de piratear mi camino a través de este, pero todavía me gustaría creer que la torta está siendo desarrollado por un grupo de personas que tienen mucha más experiencia y conocimiento que yo, así que supongo que hay una buena razón de esta "mala conducta percibida".

he tratado de presentar mi problema tan bueno como pueda, pero debido a mis conocimientos de inglés oxidados, que tenía que tomar algunos desvíos :) Voy a explicar más si es necesario.

¿Fue útil?

Solución

El formato "oficial" para la torta URL debe ser el array('controller' => 'foo', 'action' => 'bar', 'baz', 'admin' => true) notación de matriz. Siempre que escriba las direcciones URL, debe utilizar este formato. La clase Router se traducirá a cualquiera de los hilos (/admin/foo/bar/baz) o información necesarios para el Dispatcher (array('named' => array(), 'pass' => array(), …)), dependiendo de donde se utiliza la URL.

Se debe pensar en ella en términos de los cuales la acción del controlador que desea invocar. URL (como cadenas) sólo son un mal necesario para lograr esto en un contexto web. No debería haber ninguna necesidad para que pueda utilizar el formato Dispatcher. Además no se puede utilizar la notación de cadena al especificar las direcciones URL, ya que estos no se pueden enrutar inversa si alguna vez desea cambiar su esquema de URL.

Tal vez podría explicar con un ejemplo por qué es necesario convertir estas tres formas de una a la otra?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top