2

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

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

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

我可以让一切都以简单的方式工作,但我需要让事情更有活力。我想知道的是:如何使用路线标题(即'about-us'或'article-1-title')从数据库中获取ID?

4

2 回答 2

3

您需要在 Laravel 中使用可选参数路由,如Laravel 文档中所述。

将以下内容添加到您的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 应用程序中做着非常相似的事情。我以markdown格式存储所有 CMS 内容,并在 Laravel 中使用Parsedown将其转换为 HTML ,然后将其传递给视图。完全符合我的需要。

于 2013-12-12T09:32:54.813 回答
0

您可以使用 Route 模型绑定。

例如:

// 假设你有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

于 2013-12-12T10:21:08.577 回答