gpt4 book ai didi

rest - Laravel 4 定义 RESTful Controller

转载 作者:行者123 更新时间:2023-12-03 14:33:51 28 4
gpt4 key购买 nike

所以我是 v4 的 Laravel 框架的新手,想知道创建和使用 RESTful Controller 的方法是什么。通读文档,我对 RESTful Controller 和资源 Controller 之间的区别有点困惑。

在定义 RESTful Controller 时,根据文档,它建议在 routes.php 中执行以下操作:

Route::controller('posts', 'PostController');

PostController ,我们是否通过在方法名称前加上我们想要使用的 HTTP 动词来定义类方法?例如:
class PostController extends \BaseController {
public function getIndex()
{
//
}
}

但是,它还概述了在 routes.php 中创建资源 Controller 的方法。文件像这样:
Route::resource('posts', 'PostController');

而在 PostController.php我们定义方法时不使用 HTTP 动词作为前缀。
class PostController extends \BaseController {
public function index()
{
//
}
}

两者有什么区别?我们什么时候使用一个而不是另一个,为什么?

另外,我们应该使用 Route::controller('posts', 'PostController');Route::resource('posts', 'PostController');将路由传递给 Controller ​​,或者我们应该手动定义每个路由,如下所示:
Route::get('/users', 'UserController@index');
Route::get('/users/create', 'UserController@create');
Route::post('/users', 'UserController@store');
Route::get('/users/{id}', 'UserController@show');
Route::get('/users{id}/edit', 'UserController@edit');
Route::put('/users', 'UserController@update');
Route::delete('/users', 'UserController@destroy');

最佳答案

以这个 Controller 为例:

<?php

class TestController extends BaseController {

public function getIndex()
{
echo "a";
}

public function postSecond($a)
{
echo "b";
}

}

在您的 route ,如果您有
Route::controller('tests', 'TestController');

并执行
php artisan routes

你将拥有:
+--------+--------------------------------------------+------------------------+-----------------------------------+----------------+---------------+
| Domain | URI | Name | Action | Before Filters | After Filters |
+--------+--------------------------------------------+------------------------+-----------------------------------+----------------+---------------+
| | GET /tests/index/{v1}/{v2}/{v3}/{v4}/{v5} | | TestController@getIndex | | |
| | GET /tests | | TestController@getIndex | | |
| | POST /tests | tests.store | TestController@store | | |
| | GET /tests/{_missing} | | TestController@missingMethod | | |
+--------+--------------------------------------------+------------------------+-----------------------------------+----------------+---------------+

Laravel 会自动检查 Controller 并根据它找到的方法生成路由。

但是如果你这样做
Route::resource('tests', 'TestController');

您将获得此路线列表:
+--------+--------------------------------------------+------------------------+-----------------------------------+----------------+---------------+
| Domain | URI | Name | Action | Before Filters | After Filters |
+--------+--------------------------------------------+------------------------+-----------------------------------+----------------+---------------+
| | GET /tests | | Closure | | |
| | GET /tests | tests.index | TestController@index | | |
| | GET /tests/create | tests.create | TestController@create | | |
| | POST /tests | tests.store | TestController@store | | |
| | GET /tests/{tests} | tests.show | TestController@show | | |
| | GET /tests/{tests}/edit | tests.edit | TestController@edit | | |
| | PUT /tests/{tests} | tests.update | TestController@update | | |
| | PATCH /tests/{tests} | | TestController@update | | |
| | DELETE /tests/{tests} | tests.destroy | TestController@destroy | | |
+--------+--------------------------------------------+------------------------+-----------------------------------+----------------+---------------+

不用猜测,Laravel 使用预定义的 CRUD 路由列表,您可以删除其中一些路由,但它不会检查您的 Controller 来为您的方法构建路由。

你决定什么最适合你。但是,通常,如果您的 Controller 是 CRUD Controller ,Route::resource() 是一个好的开始,否则您可以使用 Route::controller() 或手动构建您的路由。

编辑:

没有真正的为什么一个或为什么另一个,只是设计和选择的问题。有些人永远不会使用它们。只是帽子 Route::resource()遵循 Rails 路由方式: http://guides.rubyonrails.org/routing.html .

使用 Route::resource()你不需要创建所有这些方法,但你最终会得到一个毫无意义的路由列表,因为 Laravel 总是默认创建所有这些方法,除非你这样做:
Route::resource('photo', 'PhotoController',
array('only' => array('index', 'show')));

并且您的路线列表将仅显示索引并显示操作。

另外,如果您需要一些其他路线,请使用 Route::resource()您必须手动构建它们或使用一些魔法使它们自动用于您所有足智多谋的路线。使用 Route::controller()一切都是自动的,每次添加新方法时,都会为您创建一条新路线。

同样,如果您要构建 CRUD Controller ,请从 Route::resource() 开始.否则,请考虑在您的特定情况下一个或另一个的好处。

编辑2:

这是一篇很棒的文章,来自 Phil Sturgeon(PyroCMS 和 PHP-FIG),关于手动构建所有路由的好处: http://philsturgeon.co.uk/blog/2013/07/beware-the-route-to-evil .

关于rest - Laravel 4 定义 RESTful Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18402298/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com