È necessario impostare collegamenti più puliti - attualmente i collegamenti sono troppo lunghi - framework Zend

StackOverflow https://stackoverflow.com/questions/2309584

Domanda

Sto utilizzando il framework zend per il mio progetto - ho provato a configurarlo utilizzando collegamenti puliti - tuttavia ho notato che i miei collegamenti sembrano diventare davvero molto lunghi e mi chiedo se a questo punto ci sarebbe un modo per incorporare una struttura in cui potrei utilizzare collegamenti più piccoli.

Ecco un esempio: il mio sito web ha un controller di directory, che ha un'azione persona che accetta un parametro id, quindi un collegamento per vedere una persona con un ID determinato è simile a:

www.mywebsite.com/directory/person/id/1809

Sembra ok ma sto lavorando ora per rendere i collegamenti più leggibili e facili da usare per i motori di ricerca - mi piacerebbe avere qualcosa del genere - presupponendo che l'ID utente 1809 si chiami John Smith:

www.mywebsite.com/directory/person/John-Smith-1809

Qualcosa di veramente semplice come il seguente sarebbe ancora meglio:

www.mywebsite.com/John-Smith-1809

Anche se non so come potrei gestirlo senza menzionare un controller o un'azione... qualche idea ragazzi sarebbe davvero d'aiuto...

È stato utile?

Soluzione

Dai un'occhiata al manuale ZF su come utilizzare Routes .

In sostanza, avete bisogno di qualcosa di simile per farlo funzionare:

$route = new Zend_Controller_Router_Route_Regex(
    '(.+)-(\d+)',
    array(
        'controller' => 'directory',
        'action'     => 'person'
    ),
    array(
        1 => 'name',
        2 => 'id'
    ),
    '%s-%d'
);
$router->addRoute('directoryPerson', $route);

Nota: non aspettatevi questo per correre fuori dalla scatola. Si dovrà probabilmente modificarlo. Dovrebbe arrivare nella giusta direzione anche se.

Altri suggerimenti

Come diceva una risposta precedente, potresti utilizzare un percorso Regex, ma per cominciare sarebbe probabilmente più semplice utilizzare un percorso "normale" che assomigli a:

http://tuosito.com/1234/John-Smith/

Nel tuo bootstrap faresti:

$frontController = Zend_Controller_Front::getInstance();
$router = $frontController->getRouter();

$router->addRoute('user', new Zend_Controller_Router_Route(
    ':user-id/:user-name/',
    array(
        'module' => 'user',
        'controller' => 'user',
        'action' => 'read'
    )
));

Questo aggiunge un percorso chiamato "utente" al router, che ha il formato /id-utente/nome-utente, quindi /1234/John-Smith/.Cercherà un controller utente in un modulo utente e passerà all'azione di lettura.Ovviamente puoi cambiarlo con un altro modulo/controller/azione, se lo desideri.

Avresti quindi User_UserController nel modulo Utente, che ha una readAction();In quell'azione potresti ottenere l'ID con:

$userId = $this->_getParam('user-id');

Allo stesso modo, se ne avessi bisogno, potresti recuperare il nome.

$userName = $this->_getParam('user-name');

In uno script di visualizzazione potresti generare un URL per quella rotta con:

<?php echo $this->url(array('user-id' => 1234, 'user-name' => 'John Smith'), 'user', true); ?>

Nota il parametro "utente", che indica al router di utilizzare la rotta "utente" definita in precedenza.

È possibile utilizzare il modulo mod_rewrite di Apache per riscrivere il vostro URL

http://httpd.apache.org/docs/1.3/mod /mod_rewrite.html

<IfModule mod_rewrite.c>

  RewriteEngine On

  RewriteCond ###blah blah blah###
  RewriteRule ###blah blah blah###

</IfModule>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top