Hãy điều khiển này làm ví dụ:
<?php
class TestController extends BaseController {
public function getIndex()
{
echo "a";
}
public function postSecond($a)
{
echo "b";
}
}
Trong tuyến đường của bạn, nếu bạn có
Route::controller('tests', 'TestController');
Và thực thi e
php artisan routes
Bạn sẽ có:
+--------+--------------------------------------------+------------------------+-----------------------------------+----------------+---------------+
| Domain | URI | Name | Action | Before Filters | After Filters |
+--------+--------------------------------------------+------------------------+-----------------------------------+----------------+---------------+
| | GET /tests/index/{v1}/{v2}/{v3}/{v4}/{v5} | | [email protected] | | |
| | GET /tests | | [email protected] | | |
| | POST /tests | tests.store | [email protected] | | |
| | GET /tests/{_missing} | | [email protected] | | |
+--------+--------------------------------------------+------------------------+-----------------------------------+----------------+---------------+
Laravel kiểm tra bộ điều khiển và tạo đường khác dựa trên những gì các phương pháp mà nó tìm thấy, tự động.
Nhưng nếu bạn làm
Route::resource('tests', 'TestController');
Bạn sẽ nhận được danh sách tuyến đường này:
+--------+--------------------------------------------+------------------------+-----------------------------------+----------------+---------------+
| Domain | URI | Name | Action | Before Filters | After Filters |
+--------+--------------------------------------------+------------------------+-----------------------------------+----------------+---------------+
| | GET /tests | | Closure | | |
| | GET /tests | tests.index | [email protected] | | |
| | GET /tests/create | tests.create | [email protected] | | |
| | POST /tests | tests.store | [email protected] | | |
| | GET /tests/{tests} | tests.show | [email protected] | | |
| | GET /tests/{tests}/edit | tests.edit | [email protected] | | |
| | PUT /tests/{tests} | tests.update | [email protected] | | |
| | PATCH /tests/{tests} | | [email protected] | | |
| | DELETE /tests/{tests} | tests.destroy | [email protected] | | |
+--------+--------------------------------------------+------------------------+-----------------------------------+----------------+---------------+
Không đoán, Laravel sử dụng một danh sách CRUD được xác định trước của tuyến đường, bạn có thể loại bỏ một số những tuyến đường nhưng nó sẽ không kiểm tra bộ điều khiển của bạn để xây dựng các tuyến đường cho các phương pháp của bạn.
Bạn quyết định điều gì là tốt nhất cho mình. Nhưng, thông thường, nếu bộ điều khiển của bạn là một CRUD, Route :: resource() là một khởi đầu tốt, bạn có thể sử dụng Route :: controller() hoặc xây dựng các tuyến đường của bạn bằng tay.
CHỈNH SỬA:
Không thực sự lý do tại sao một lý do khác, chỉ là vấn đề thiết kế và lựa chọn. Một số sẽ không sử dụng chúng trong số đó. Nó chỉ là mũ Route::resource()
theo cách Rails định tuyến: http://guides.rubyonrails.org/routing.html.
Sử dụng Route::resource()
bạn không cần phải tạo ra tất cả các phương pháp đó, nhưng bạn sẽ kết thúc với một danh sách các tuyến đường vô nghĩa, bởi vì Laravel luôn tạo tất cả chúng theo mặc định, trừ khi bạn làm:
Route::resource('photo', 'PhotoController',
array('only' => array('index', 'show')));
Và danh sách các tuyến đường của bạn sẽ chỉ hiển thị chỉ mục và hiển thị các hành động.
Ngoài ra, nếu bạn cần một số tuyến đường khác, sử dụng Route::resource()
bạn sẽ phải xây dựng chúng theo cách thủ công hoặc làm việc một số phép thuật để làm cho chúng tự động cho tất cả các tuyến đường tháo vát của bạn. Sử dụng Route::controller()
mọi thứ đều tự động, mỗi khi bạn thêm phương thức mới, tuyến đường mới sẽ được tạo cho bạn.
Một lần nữa, nếu bạn có bộ điều khiển CRUD để xây dựng, hãy bắt đầu bằng cách sử dụng Route::resource()
. Nếu không, hãy suy nghĩ về lợi ích của việc này hay cách khác trong trường hợp cụ thể của bạn.
EDIT2:
Đây là một bài viết tuyệt vời, từ Phil Sturgeon (PyroCMS và PHP-FIG), về lợi ích của tay xây dựng tất cả các tuyến đường của bạn: http://philsturgeon.co.uk/blog/2013/07/beware-the-route-to-evil.
Sau này, Định tuyến :: tài nguyên, theo tài liệu - trừ khi bạn cần kiểm soát nhiều hơn. :) –
Vì vậy, bằng cách sử dụng 'Route :: controller ('posts', 'PostController');' không nên được sử dụng để tạo các bộ điều khiển RESTful? Chúng ta không nên tiền tố các phương thức điều khiển với động từ HTTP thích hợp? Tôi nhận ra câu hỏi cuối cùng có lẽ không phù hợp với định dạng này vì nó là chủ quan. – Iain