Laravel 4在我的控制器中使用/获取路径名称

时间:2013-12-12 09:09:37

标签: laravel laravel-routing

我刚刚开始学习Laravel,但我似乎无法完成任务。因为我是初学者,我不知道在哪里搜索。但这就是这个想法:

  • 我的CMS页面有一个控制器。
  • 我有一个现有的数据库,其内容包含字段ID - 标题 - 别名
  • 'Alias'用于构建URL(例如:http://site.tld/about-us),我在路由中使用它:

    Route::get('about-us', array('uses' => 'CmsController@showByAlias'));
    Route::get('article-1-title', array('uses' => 'CmsController@showByAlias'));
    

我可以轻松地完成所有工作,但我需要让事情变得更有活力。我想知道的是:我如何使用路线标题从数据库中获取Id(即'about-us'或'article-1-title')?

2 个答案:

答案 0 :(得分:3)

您需要在Laravel中使用可选参数路由,如Laravel documentation

中所述

将以下内容添加到routes.php。这将处理除索引页面之外的任何其他URL。如果您需要任何其他静态URL,请在此行之前添加它们。

Route::get('/{alias}', array('uses' => 'CmsController@showByAlias'));

现在您需要定义将处理路径的控制器。它可能是这样的:

class CmsController extends BaseController {

  public function showByAlias($alias)
    {
    $content = Cms::findByAlias($alias);
    return View::make('cms.show')->with('content', $content)->with('title',$title);
    }

您仍需要在模型中编写Cms::findByAlias等函数,以便从数据库中检索和处理正确的内容。当然,您可以在控制器本身内完成此操作。

另请注意,如果在URL中传递了无效别名,则需要添加错误处理。例如。在这种情况下显示404错误页面。

只是一个提示:我在Laravel应用程序中做了类似的事情。我将所有CMS内容以 markdown 格式存储,并使用Parsedown将其转换为Laravel中的HTML,然后再将其传递给视图。完全符合我的需求。

答案 1 :(得分:0)

您可以使用路线模型绑定。

例如:

//假设您有posts表,并且您拥有Post模型。

Route::bind('post', function($value, $route) {
    return Post::whereTitle($value)->firstOrFail();
});


Route::get('article/{post}', array('uses' => 'CmsController@showByAlias'));

在你的控制器中:

Public function showByAlias(Post $post) 
{
  dd($post->id);
}

<强>参考:

http://laravel.com/docs/routing#route-model-binding