Domanda

In CakePHP 3.0 i parametri con nome sono stati rimossi (grazie a Dio) a favore dei parametri della stringa di query standard in linea con altri framework applicativi.

Ciò che sto ancora faticando a capire è che in altri framework MVC, ad esempio ASP.NET, passeresti i parametri in ActionResult (come la funzione):

Edit( int id = null ) {

    // do stuff with id

}

E a quel metodo verrebbe passato l'id come una stringa di query come: /Edit?id=1 e utilizzeresti Routing per renderlo simile a: /Edit/1.

In CakePHP tuttavia qualsiasi cosa passava all'interno dei parametri della funzione come:

function edit( $id = null ) {

    // do stuff with $id

}

Deve essere eseguito come parametro passato come: /Edit/1 che ignora l'idea della stringa di query e anche la necessità di instradare per migliorare l'URL.

Se chiamo i parametri nel collegamento per quella modifica come:

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

allora devo fare:

public function edit() {

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

    // do stuff with $id

}

Per ottenere il parametro id passato.Penserei che lo riprenderebbe nella funzione come in ASP.NET per CakePHP 3.0, ma non è così.

Preferisco anteporre i valori passati nel collegamento di modifica invece di passarli semplicemente, quindi non devo preoccuparmi tanto dell'ordinale dall'altra parte e so cosa sono, ecc.

Qualcuno ha provato con uno di questi modi per passare i dati ai propri metodi in CakePHP e può far luce sui modi corretti di fare le cose e su come i cambiamenti nella versione 3.0 miglioreranno le cose in quest'area...

È stato utile?

Soluzione

Ci sono alcuni tipi di parametri di richiesta in CakePHP 3.0.Esaminiamoli:

La stringa di query:si accede con $this->request->query(), non vengono passati alle funzioni del controller come argomenti e devi farlo per creare un collegamento Html->link('My link', ['my_query_param' => $value])

Argomentazioni superate:Il tipo speciale di argomento è quello ricevuto dalla funzione del controller come argomento.È possibile accedervi come argomento o tramite ispezione $this->request->params['pass'].Costruisci collegamenti con argomenti passati a seconda del percorso, ma per il percorso predefinito aggiungi semplicemente parametri posizionali al collegamento come Html->link('My link', ['action' => view, $id, $secondPassedArg, $thirdPassedArg])

Richiedi parametri:Gli argomenti passati sono un sottotipo di questo.Un parametro di richiesta è un valore che può vivere nella richiesta a partire dalle informazioni che potrebbero essere estratte dal percorso.I parametri possono essere convertiti in altri tipi di parametri durante la loro vita.

Considera questo percorso:

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

Abbiamo effettivamente creato 3 parametri di richiesta con quel percorso: year, month E day ed è possibile accedervi con $this->request->year $this->request->month E $this->request->day.Per creare un collegamento per questo facciamo:

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

Tieni presente che poiché la rotta specifica tali parametri, questi non vengono convertiti come parametri della stringa di query.Ora, se volessimo convertirli in argomenti passati, colleghiamo invece questo percorso:

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

La nostra funzione del controller ora sarà simile a:

function archive($year, $month, $day) {
  ...
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top