2012-12-13 16 views
22

Sto guardando switching to laravel per il mio prossimo progetto.URL dinamici in laravel?

Il mio prossimo progetto sarà probabilmente un piccolo sito con poche pagine statiche, un blog e un project manager e utilizzerà i controller non le route.

Quello che mi interessa è come gestire i percorsi dinamici in Laravel.

Fondamentalmente, voglio creare una sezione di amministrazione in modo da poter creare facilmente le pagine statiche al volo e le pagine statiche avranno URL focalizzati sul SEO, ad es. http://domain.com/when-it-started Non voglio creare un nuovo controller o un percorso manualmente per ogni pagina.

Quindi mi chiedo quale sia il modo più pulito per gestirlo.

essenzialmente tutte le pagine statiche condivideranno la stessa vista, solo poche variabili da modificare.

L'instradamento dinamico dovrebbe funzionare con i controller non anziché.

E.g. se abbiamo un controller about con una funzione staff allora questo deve essere caricato tramite http://domain.com/about/staff

ma noi non hanno la funzione di players, quindi una chiamata a http://domain.com/about/players dovrebbe controllare il database per vedere se un percorso dinamico esiste e le partite. Se lo mostra, altrimenti mostra la pagina 404. Allo stesso modo per un controller inesistente. (ad esempio non ci sarebbe un controller when-it-started!)

La risposta scelta non sembra funzionare in Laravel 4. Qualsiasi aiuto con quello?

+0

@anujarora arbitrariamente sottolineando parole di domande/risposte con grassetto per "highlights migliori" non è considerata una buona modifica. In realtà, può essere considerato attivamente dannoso. Per favore, dai un'occhiata a [I post di editing introducono solo grassetto enfatizzato?] (Http://meta.stackexchange.com/q/158564/169503). –

+0

Non sto facendo sforzi extra per enfatizzare. Ho evidenziato solo le parole che dovrebbero attirare l'attenzione e aiutare a capire meglio. –

+2

@anujarora ma il punto che Xavi sta facendo è che quel tipo di editing è considerato inaccettabile dalla maggior parte dei membri della community. la correzione di grammatica e ortografia è buona, ma aggiungere "enfasi" non è qualcosa che si pensa di aggiungere al post. Per favore vai al link che Xavi ha fornito per discutere – psubsee2003

risposta

17

Per laravel 4 fare questo

Route::get('{slug}', function($slug) { 
    $page = Page::where('slug', '=', $slug)->first(); 

    if (is_null($page)) 
     // use either one of the two lines below. I prefer the second now 
     // return Event::first('404'); 
     App::abort(404); 

    return View::make('pages.show', array('page' => $page)); 
}); 

// for controllers and views 
Route::get('{page}', array('as' => 'pages.show', 'uses' => '[email protected]')); 
+1

come funziona? La pagina è modello? quali sono i requisiti per le viste/i controller? –

+0

Sì Pagina è un modello, aggiornato per mostrare i codici per l'uso di controllori e viste. Spero possa aiutare. – CharlesS

+0

Questo è fantastico (: –

8

È possibile utilizzare i caratteri jolly del percorso per il lavoro, è possibile iniziare con un (:any) e se sono necessari più segmenti di URL aggiungere uno (:all?) facoltativo, quindi identificare la pagina dallo slug.

Ad esempio:

Route::get('(:any)', function($slug) { 
    $page = Page::where_slug($slug)->first(); 

    if (is_null($page)) 
     return Event::first('404'); 

    return View::make('page')->with($page); 
}); 
1

Molto simile alla risposta di Charles', ma nel controller:

public function showBySlug($slug) { 
    $post = Post::where('slug','=',$slug)->first(); 
    // would use app/posts/show.blade.php 
    return View::make('posts.show')->with(array( 
     'post' => $post, 
    )); 
} 

Quindi è possibile instradarlo così:

Route::get('post/{slug}', '[email protected]') 
    ->where('slug', '[\-_A-Za-z]+');` 

... che ha il valore aggiunto di che consente un modo semplice per collegare direttamente alle vie di lumache su una pagina di indice, per esempio:

@foreach ($posts as $post) 
    <h2>{{ HTML::link(
     action('[email protected]', array($post->slug)), 
     $post->title 
    )}}</h2> 
@endforeach