2013-01-18 5 views
5

Mi chiedo come ottenere il nome della pagina corrente, in pratica 'solo' l'ultimo parametro nel percorso (cioè/notizie o/circa). Lo sto facendo perché voglio essere in grado di avere la pagina corrente nella navigazione evidenziata.Come ottenere il nome della pagina corrente in Silex

Idealmente, mi piacerebbe memorizzare il nome della pagina corrente in una variabile globale in modo che in Twig I possa semplicemente confrontare il nome della pagina corrente con il link e aggiungere una classe di conseguenza.

Non riesco a capire come aggiungere il nome della pagina corrente a una variabile globale. Ho provato a utilizzare qualcosa di simile:

$app['twig']->addGlobal('current_page_name', $app['request']->getRequestUri()); 

nella parte superiore del mio file app.php, ma un errore 'fuori dall'ambito della richiesta'. Ma non mi piacerebbe doverlo includere in ogni percorso.

Qual è il modo migliore per farlo?

risposta

15

Se lo metti in un livello di applicazione prima di middleware come questo, che sarà il lavoro:

$app->before(function (Request $request) use ($app) { 
    $app['twig']->addGlobal('current_page_name', $request->getRequestUri()); 
}); 

La parte "nome della pagina" della tua domanda non è chiara, stai cercando il nome del percorso corrente ? Puoi accedere a questo tramite $request->get("_route") anche nel middleware precedente, come viene chiamato quando il routing è già stato eseguito.

+0

Grazie, funziona benissimo! Ho aggiornato la mia domanda per spiegare meglio cosa intendevo. – Pete

1

È anche possibile generare la lista di navigazione direttamente nel modello di ram nav interno. E quindi importarlo nel modello principale. Quindi dovresti ottenere silex per passare alla vista l'identificatore della pagina corrente. Il modo più semplice ... per esempio da Silex dovresti passare nella variabile "path" alla tua vista. Probabilmente sarebbe più comodo recuperare nav_list dal database e passarlo a twig template come variabile di array globale. Comunque questo esempio è il più semplice che potresti ottenere per fare ciò che intendi.

nav.twig

{% set nav_list = [ 
    ["./",  "home"], 
    ["./contact", "contact"], 
    ["./about", "about us"] 
    {# ... #} 
] %} 

{% set link_active = path|default("") %} 

{% for link in nav_list %} 
    <li><a href="{{ link[0] }}" class="{% if link[0] == link_active %} activeClass {% endif %}" >{{ link[1] }}</a></li> 
{% endfor %} 

app.php

//... 
    $app->match('/about', function (Request $request) use ($app) { 
     return $app['twig']->render('about.twig', array(
      'path' => './'.end(explode('/', $request->getRequestUri())) 
     )); 
    }); 
//...