拉拉维尔 带有参数的控制器路由


Laravel Route to controller with argument

我正在尝试在不显示ID的情况下获得干净的URL。例如,我目前有:

/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');

所以。。。有没有更好的方法来实现这一目标?

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

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

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

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

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

Route::get('/My_Super_Awesome_Article/{id}', array('as' => 'my.article.show', 'uses' => 'ArticleController@show'));

你的路线错了。 注意{id}