我只是Laravel的新手,但我立刻爱上了它。作为一个不那么经验丰富的php开发人员,我确实找到了官方文档,虽然非常广泛,使用起来有点复杂,并且找到了我需要的一切。
我的问题是路由组件。如文档所述,您可以使用Route::controller
方法将路径分配给控制器。因此,如果我想为所有/blog/
路由设置一个Blog控制器,我会像这样分配它:
Route::controller('blog', 'BlogController');
那么,如果我想访问我的所有博文,请按www.foo.com/blog
或www.foo.com/blog/index
但是,我想说我希望能够通过getCategory方法显示类别。我的网址看起来像www.foo.com/blog/category
,例如,如果我想通过slug从DB获取新闻类别,我想使用:www.foo.com/blog/category/news
作为URI。
我现在的问题是,如何将slug传递给url并在getCategory方法中访问它?我是否需要通过Route::get('blog/category/{slug}', 'BlogController@getCategory')
指定它,或者是否有办法使用Route::controller('blog', 'BlogController')
并从getCategory方法中的URL发送和访问参数?
我已经尝试通过谷歌和官方文档找到它,但我找不到这个问题的明确答案......
答案 0 :(得分:2)
您只需向getCategory方法添加参数:
public function getCategory($category) {
die($category);
}
如果在参数列表中将其初始化为null,则它变为可选。或者,您始终可以从Input对象中提取参数,但它们需要以查询字符串格式传递:
$category = Input::get('category');
话虽如此,我要小心不要使用Controller路由。它很方便,模仿传统的MVC框架,但我相信它已被计划弃用 - 老实说,你错过了一些非常灵活的功能。
答案 1 :(得分:1)
使用Route::controller('blog', 'BlogController');
允许您使用REST命名约定定义单个路径来处理控制器中的每个操作。然后您必须向控制器添加方法,并以它们响应的HTTP谓词为前缀。这意味着如果你有一个名为getIndex()的方法,它将在对URL“yoursite.com/blog”发出GET请求时执行。
要处理对同一URL的POST请求,请添加一个前缀为post(ex:postComment())的方法,以此类推其他http动词PUT,PATCH和DELETE。
我认为您需要更多自定义内容,因此您可以使用资源控制器:
Route::resource('blog', 'BlogController');
这将在博客资源周围生成一些RESTful路由,在项目文件夹中运行php artisan routes
以查看生成的路由,它应该是这样的:
Verb Path Action Route Name
GET /blog index blog.index
GET /blog/create create blog.create
POST /blog store blog.store
GET /blog/{blog} show blog.show
GET /blog/{blog}/edit edit blog.edit
PUT/PATCH /blog/{blog} update blog.update
DELETE /blog/{blog} destroy blog.destroy
操作列中的是控制器中应具有的功能。
如果要定义更多路线,可以使用routes.php文件中的Route::get
或Route::post
进行操作
我希望这会让你更清楚,享受与Laravel的路线!!!