2015-02-25 18 views
19

Tôi hơi bối rối về cách làm việc này. Nhưng tôi nhận được lỗi Route [/preferences/1] not defined.Tuyến đường Laravel 5 chưa được xác định, trong khi đó?

Trong routes.php của tôi, tôi có:

Route::patch('/preferences/{id}', '[email protected]');

Và trong file view (tài khoản/preferences.blade.php) Tôi có:

{!! Form::model(Auth::user(), ['method' => 'PATCH', 'route' => '/preferences/' . Auth::user()->id]) !!}

Tôi nhận được thông báo lỗi cho biết tuyến đường không tồn tại. Tôi nghĩ rằng tôi là sự hiểu lầm các tài liệu về chủ đề này, nhưng theo ý kiến ​​của tôi tôi đã xác định một lộ trình cho các yêu cầu PATCH với một tham số nhất định, và thiết lập này trong xem một cách chính xác.

Tôi đang xem gì ở đây?

+0

xác định không gian tên của bạn trong bộ điều khiển tuyến đường. –

+0

hãy xem: http://laravel.com/docs/5.0/routing#route-model-binding –

+0

Cảm ơn bạn đã trả lời. Tôi nghĩ rằng mô hình tuyến tính ràng buộc chỉ là cần thiết để đi qua toàn bộ các đối tượng để các tuyến đường, không chỉ là một tham số nguyên? Tuy nhiên tôi đã cố gắng để đăng ký một mô hình 'người dùng' của' App \ User' để router, nhưng vẫn còn điều này không hoạt động. Cũng cố gắng thử nghiệm nó với một đóng cửa trong tuyến đường thay vì gọi phương pháp điều khiển. – Ben

Trả lời

49

Phương thức route(), được gọi khi bạn làm ['route' => 'someroute'] khi mở biểu mẫu, muốn gọi là có tên là tuyến đường. Bạn cho một con đường một tên như thế này:

Route::patch('/preferences/{id}',[ 
    'as' => 'user.preferences.update', 
    'uses' => '[email protected]' 
]); 

Đó là, bạn đưa ra lập luận thứ hai của tuyến đường vào một mảng, nơi bạn chỉ định cả tên đường (các as), và cũng phải làm gì khi tuyến đường được nhấn (số uses).

Sau đó, khi bạn mở biểu mẫu, bạn gọi các tuyến đường:

{!! Form::model(Auth::user(), [ 
    'method' => 'PATCH', 
    'route' => ['user.preferences.update', Auth::user()->id] 
]) !!} 

Bây giờ, đối với một con đường không có tham số, bạn chỉ có thể làm 'route' => 'routename', nhưng kể từ khi bạn có một tham số, bạn thực hiện một mảng thay vì và cung cấp các thông số theo thứ tự. Tất cả những gì đã nói, vì dường như bạn đang cập nhật tùy chọn của người dùng hiện tại, tôi khuyên bạn nên để bộ điều khiển xử lý kiểm tra id của người dùng hiện đã đăng nhập và cập nhật cơ sở đó - không cần gửi id trong url và tuyến đường trừ khi người dùng của bạn cũng cần phải cập nhật tùy chọn của người dùng khác. :)

+1

như là một theo dõi cho câu hỏi này, những gì nếu tuyến đường là một tuyến đường tài nguyên được tạo ra từ nói .. 'Route :: tài nguyên ('/ người dùng', 'UserController');', và 'route: list' cho thấy rằng nó có một tên của 'users.update', nhưng khi tôi cố gắng tạo ra các tuyến đường nó mang lại cho tôi rằng lỗi .. không' route() 'chỉ làm việc cho các tuyến đường được đặt tên rõ ràng? – bruchowski

+0

nevermind, đào vào nguồn 'FormBuilder.php', trông như thế này hoạt động' route: ['users.update', user] ' – bruchowski

0

Trên một mặt lưu ý:

tôi đã có vấn đề tương tự mà nhiều lần tôi nhận được phương pháp hành động lỗi không tìm thấy, nhưng rõ ràng nó là xác định trong điều khiển.

Vấn đề không phải là ở bộ điều khiển, mà đúng hơn là cách tập routes.php được thiết lập

Cho phép nói rằng bạn có điều khiển lớp thiết lập như là một nguồn tài nguyên trong file route.php

Route::resource('example', 'ExampleController'); 

rồi '/ example 'sẽ có tất cả tài nguyên RESTful liệt kê ở đây: http://laravel.com/docs/5.0/controllers#restful-resource-controllers

nhưng bây giờ bạn muốn có một số định nghĩa dưới dạng ví dụ: 'hành động'=>' ExampleController @ postStore' sau đó bạn phải thay đổi tuyến đường này (trong tập tin route.php) tới:

Route::controller('example', 'ExampleController'); 
11

Chủ đề này là cũ nhưng là người đầu tiên xuất hiện vì vậy tôi nghĩ id chia sẻ giải pháp của tôi. Ngoài việc có các tuyến đường được đặt tên trong tệp routes.php của bạn.Lỗi này cũng có thể xảy ra khi bạn có URL trùng lặp trong tệp tuyến đường của mình, nhưng với các tên khác nhau, lỗi có thể gây nhầm lẫn trong trường hợp này. Ví dụ

Route::any('official/form/reject-form}', '[email protected]')->name('reject-form'); 


Route::any('official/form/accept-form', '[email protected]')->name('reject-form'); 

Thay đổi về những cái tên giải quyết vấn đề. Sao chép dán và mệt mỏi sẽ giúp bạn giải quyết vấn đề này :).

+0

Điều này giải quyết được vấn đề cho tôi, tôi loại bỏ tuyến đường mà tôi đã tạo cho thanh ghi (Route :: get ('/ register', 'Auth \ RegisterController @ getRegister');) và để cho Auth :: routes() kiểm soát – NZSteve

1

Trong trường hợp của tôi là giải pháp rất đơn giản:

tôi đã xác định con đường ở đầu thật của tập tin route.php.

Sau khi di chuyển tuyến đường được đặt tên xuống dưới cùng, ứng dụng của tôi cuối cùng đã nhìn thấy nó. Nó có nghĩa là bằng cách nào đó tuyến đường được xác định quá sớm.

+0

có trong laravel 5 chỉ cần sử dụng name(). ví dụ: Tuyến đường :: trận đấu (['get', 'post'], '/ dish/update/{id}', 'DishController @ storeUpdate') -> tên ('route__name'); chuyển hướng() -> tuyến đường ('route__name', ['id' => $ site-> id]); –

2

tôi đã gặp vấn đề tương tự và tìm giải pháp gần đây.

bạn nên kiểm tra xem tuyến đường của bạn là khá bên trong một đường :: nhóm

như ở đây:

Route::group(['prefix' => 'Auth', 'as' => 'Auth.', 'namespace' => 'Auth', 'middleware' => 'Auth'] 

nếu vì vậy bạn nên sử dụng nó trong file xem. như ở đây:

!! Form::model(Auth::user(), ['method' => 'PATCH', 'route' => 'Auth.preferences/' . Auth::user()->id]) !!} 
Các vấn đề liên quan