Pergunta

É o meu primeiro post aqui :)

Estou tendo algumas dificuldades em lidar com URLs e parâmetros. Passei pela documentação da API da classe do roteador repetidamente e não encontrei nada útil.

Primeiro de tudo, gostaria de saber se existe algum formato 'universal' no CakePhp (1.3) para manusear URLs. Atualmente, estou lidando com todos os meus URLs como matrizes simples (no formato que o roteador :: URL e $ html-> link aceita) e é fácil desde que eu só precise passar como argumentos para os métodos do próprio Bolo. Geralmente fica complicado se eu precisar de outra coisa.

Principalmente, estou tendo problemas em converter URLs de string no formato básico da matriz. Digamos que eu queira converter $ Arrayurl em string e mais uma vez em 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] => 
) */

Isso parece muito código para fazer algo tão simples que converta entre 2 formatos centrais. Além disso, observe que o $ parsed ainda não está da mesma forma que $ Arrayurl. É claro que eu poderia ajustar $ analisado manualmente e, na verdade, fiz isso algumas vezes como um patch rápido, mas gostaria de chegar ao fundo disso.

Também notei que, ao usar o roteamento de prefixo, $ this-> params no controlador possui o prefixo incorporado na ação (ou seja, [ação] => 'admin_edit') e o resultado do roteador :: parse () não. Ambos, é claro, têm o prefixo em sua própria chave.

Para resumir, como converter um URL entre algum desses 3 (ou 4, se você incluir a coisa do prefixo) mencionou os formatos da maneira certa? Claro razão para esse "mau comportamento percebido".

Tentei apresentar meu problema o mais bom possível, mas devido às minhas habilidades em inglês enferrujado, tive que fazer alguns desvios :) Vou explicar mais, se necessário.

Foi útil?

Solução

O formato "oficial" para URLs de bolo deve ser a notação da matriz array('controller' => 'foo', 'action' => 'bar', 'baz', 'admin' => true). Sempre que você escrever URLs, você deve usar este formato. A classe do roteador os traduzirá para as cordas (/admin/foo/bar/baz) ou informação necessária para o despachante (array('named' => array(), 'pass' => array(), …)), dependendo de onde o URL é usado.

Você deve pensar nisso em termos de qual ação do controlador deseja invocar. Os URLs (como cordas) são apenas um mal necessário para realizar isso em um contexto da Web. Não deve haver necessidade de você usar o formato do Dispatcher. Você também não deve usar a notação de string ao especificar URLs, pois eles não podem ser escuros reversos se você quiser alterar seu esquema de URL.

Talvez você possa explicar com um exemplo por que precisa converter essas três formas de uma para a outra?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top