Laravel通过参数路由到控制器

时间:2014-11-21 04:07:32

标签: php laravel laravel-routing

我正在尝试使用不显示ID的干净网址。例如,我目前有:

/Article/2 
/Article/3 
...

相反,我希望这些网址切换到这样的内容:

/Article/2/ -> /My_Super_Awesome_Article/  
/Article/3/ -> /Another_Cool_Article

我的路线如下:

Route::resource('/article', 'ArticleController');

控制器是这样的:

class MenuController extends \BaseController {

    public function show($id)
    {
            $page = Model::FindOrFail($id);
            return View::make('article.show')->withPage($page);
    }

    // more functions

=============================================== ====

什么工作,但我认为这是一个不好的方式:

我找到了一种方法来做到这一点......但这肯定不是最好的方法。这是我目前用来替代的技术:

在控制器中,我添加了这个

public function Clean_Url_20()
    {
            $page = Model::FindOrFail( 20 );
            return View::make('article.show')->withPage($page);
    }

在路线中,我用这个:

Route::get('/My_Super_Cool_URL', 'ArticleController@Clean_Url_20');

那么......有更好的方法来实现这个目标吗?

2 个答案:

答案 0 :(得分:0)

Route::get('/My_Super_Awesome_Article/{id}', array('as' => 'my.article.show', 'uses' => 'ArticleController@show'));
你的路线错了。请注意{id}

答案 1 :(得分:0)

如果您为每篇文章指定一条路线,则缺乏灵活性。如果你有1000篇文章,你必须定义1000条路线。

为什么不以另一种方式定义这些路线?例如:

Route::get('article/{articleSlug}','ArticlesController@show');

在您的控制器中,您只需使用slug查找特定文章。

顺便说一下,在准备文章数据时,可以使用Str :: slug()格式化文章标题。