23

次のプロジェクトのためにlaravelに切り替えることを検討しています。

私の次のプロジェクトはおそらく、いくつかの静的ページ、ブログ、およびプロジェクト マネージャーを備えた小さなサイトで、ルートではなくコントローラーを使用する予定です。

私が興味を持っているのは、Laravel で動的ルートを管理する方法です。

基本的に、静的ページをその場で簡単に作成できるように管理セクションを構築したいと考えています。静的ページには、SEO に重点を置いた URL (例: http://domain.com/when-it-startedなど)が含まれます。ページごとに新しいコントローラーまたはルートを手動で作成する必要があります。

だから、これを処理する最もクリーンな方法は何だろうと思っています。

基本的にすべての静的ページは同じビューを共有し、いくつかの変数を変更するだけです。

動的ルーティングは、代わりにではなく、コントローラーで動作する必要があります。

たとえばabout、関数を備えたコントローラーがある場合、これはhttp://domain.com/about/staffstaff経由でロードする必要があり ます

ただし、関数がないため、 http://domain.com/about/playersplayersへの呼び出しでデータベースをチェックして、動的ルートが存在し、一致するかどうかを確認する必要があります。それが表示される場合は、そうでない場合は 404 ページを表示します。存在しないコントローラーの場合も同様です。(たとえば、コントローラーはありません!)when-it-started

選択した答えは、Laravel 4 では機能しないようです。

4

3 に答える 3

18

Laravel 4の場合、これを行います

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' => 'PageController@show'));
于 2013-04-03T11:42:34.860 に答える
2

チャールズの答えに非常に似ていますが、コントローラーでは:

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,
    ));
}

次に、次のようにルーティングできます。

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

...これには、インデックス ページのスラッグ ルートに簡単に直接リンクできるという追加のボーナスがあります。たとえば、次のようになります。

@foreach ($posts as $post)
    <h2>{{ HTML::link(
        action('PostsController@showBySlug', array($post->slug)),
        $post->title
    )}}</h2>
@endforeach
于 2014-02-14T17:27:38.193 に答える