Pergunta

No CakePHP 3.0 parâmetros nomeados foram removidos (graças a deus) em favor do padrão de parâmetros de cadeia de consulta em linha com outras estruturas de aplicação.

O que eu ainda estou lutando para colocar minha cabeça em torno, porém, é que em outros frameworks MVC, por exemplo ASP.NET você gostaria de passar os parâmetros do ActionResult (mesma função):

Edit( int id = null ) {

    // do stuff with id

}

E que método seria passada a identificação como uma seqüência de caracteres de consulta como: /Edit?id=1 e você usaria o Encaminhamento para torná-lo muito como: /Edit/1.

No CakePHP no entanto nada passou dentro da função de parâmetros como:

function edit( $id = null ) {

    // do stuff with $id

}

Deve ser feito como um parâmetro passado como: /Edit/1 que ignora a seqüência de caracteres de consulta idéia e também a necessidade de encaminhamento para melhorar o URL.

Se eu nome params no link para editar como:

$this->Html->link('Edit', array('action' => 'edit', 'id' => $post->id));

Em seguida, tenho de o fazer:

public function edit() {

    $id = $this->request->query('id');

    // do stuff with $id

}

Para obter o id do parâmetro passado.Seria, pensei que iria buscá-lo na função, como no ASP.NET para o CakePHP 3.0, mas ele não.

Eu prefiro prefixo passada valores no link editar em vez de apenas passando-os para que eu não precise de se preocupar com o ordinal tanto na outra extremidade, e eu sei o que eles são, etc.

Alguém já jogou com qualquer uma destas formas de transmissão de dados a seus métodos no CakePHP e pode lançar mais luz sobre as formas corretas de fazer as coisas e como as alterações na versão 3.0 vai melhorar as coisas nesta área...

Foi útil?

Solução

Existem alguns tipos de solicitação params no CakePHP 3.0.Vamos analisá-los:

A Seqüência De Caracteres De Consulta:são acessados com $this->request->query(), não são passados para as funções de controlador como argumentos e, para fazer um link que você precisa fazer Html->link('My link', ['my_query_param' => $value])

Argumentos passados:O especial tipo de argumento é aquele que é recebido pelo controlador de função como um argumento.Eles são acessados como o argumento ou inspecionando $this->request->params['pass'].Você cria vínculos com o passado args dependendo da rota, mas para a rota padrão que você acabou de adicionar parâmetros posicionais para o link como Html->link('My link', ['action' => view, $id, $secondPassedArg, $thirdPassedArg])

Pedido Params:Argumentos passados são um subtipo de um presente.Um pedido param é um valor que pode viver no pedido de informação que pode ser extraída da rota.Parâmetros podem ser convertidos para outros tipos de parâmetros durante a sua vida.

Considere esta rota:

Router::connect('/articles/:year/:month/:day', [
  'controller' => 'articles', 'action' => 'archive'
]);

Temos efetivamente criou 3 solicitação de parâmetros com que a rota: year, month e day e eles podem ser acessados com $this->request->year $this->request->month e $this->request->day.Para construir um link para isso fazemos:

$this->Html->link(
  'My Link',
  ['action' => 'archive', 'year' => $y, 'month' => $m, 'day' => $d]
);

Note que, como a rota especificar esses parâmetros, eles não são convertidos como seqüência de caracteres de consulta de parâmetros.Agora, se quisermos converter-se aqueles aos argumentos passados, podemos ligar esta rota em vez disso:

Router::connect('/articles/:year/:month/:day',
  ['controller' => 'articles', 'action' => 'archive'],
  ['pass' => ['year', 'month', 'day']]
);

Nosso controlador de função aspecto agora:

function archive($year, $month, $day) {
  ...
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top