Domanda

Tendo sempre a dimenticare questi built-in Symfony funzioni per creare collegamenti.

È stato utile?

Soluzione

Se il tuo obiettivo è avere URL intuitivi in ​​tutta la tua applicazione, utilizza il seguente approccio:

1) Crea una regola di routing per il tuo modulo/azione nel file routing.yml dell'applicazione.L'esempio seguente è una regola di instradamento per un'azione che mostra le domande più recenti in un'applicazione, per impostazione predefinita alla pagina 1 (utilizzando un cercapersone):

recent_questions:
   url:    questions/recent/:page
   param:  { module: questions, action: recent, page: 1 }

2) Una volta impostata la regola di routing, utilizzare il file url_for() helper nel modello per formattare gli URL in uscita.

<a href="<?php echo url_for('questions/recent?page=1') ?>">Recent Questions</a>

In questo esempio, verrà costruito il seguente URL: http://myapp/questions/recent/1.html.

3) Gli URL in entrata (richieste) verranno analizzati dal sistema di routing e, se viene trovata una corrispondenza di modello nella configurazione della regola di routing, i caratteri jolly denominati (ad es.IL :/page parte dell'URL) diventeranno parametri della richiesta.

Puoi anche usare il link_to() helper per generare un URL senza utilizzare l'HTML <a> etichetta.

Altri suggerimenti

Questo consiglio è per symfony 1.0.Probabilmente funzionerà per le versioni successive.

All'interno della tua classe sfAction:

string genUrl($parametri = array(), $assoluto = false)

per esempio.$this->getController()->genUrl('yourmodule/youraction?key=value&key2=value', true);

In un modello:

Questo genererà un collegamento normale.

string link_to($nome, $internal_uri, $opzioni = array());

per esempio.link_to('Nome del mio collegamento', 'il tuo modulo/la tua azione? chiave=valore&chiave2=valore');

Inoltre, se desideri effettivamente una stringa di query con quell'URL, utilizza questo:

link_to('My link name', 'yourmodule/youraction?key=value&key2=value',array('query_string'=>'page=2'));

Altrimenti, proverà a instradarlo come parte dell'URL e probabilmente interromperà l'azione.

Puoi generare l'URL direttamente senza prima definire la regola.

Se desideri generare URL nelle azioni, puoi utilizzare generareUrl() aiutante:

$this->generateUrl('default', array('module'=>'[ModuleName]','action'=>'[ActionName]'))

Se desideri generare URL nei modelli, puoi utilizzare url_per() aiutante:

url_for('[ModuleName]/[ActionName]', $absolute)

imposta $absolute come true/false, non dimenticare di usare echo se vuoi visualizzarlo.

Ma se vuoi fare un collegamento (qualcosa di simile a <a href=""></a>), Collegamento a() l'aiutante lo farà.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top