2015-02-25 22 views
19

Jestem trochę zdezorientowany, jak to działa. Ale pojawia się błąd Route [/preferences/1] not defined.Laravel 5 nie określono trasy, a jest?

W moim routes.php mam:

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

A w pliku widoku (konto/preferences.blade.php) mam:

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

jestem otrzymuję komunikat o błędzie informujący, że trasa nie istnieje. Myślę, że nie rozumiem dokumentów na ten temat, ale moim zdaniem zdefiniowałem trasę dla żądań PATCH z danym parametrem i ustawiłem to poprawnie w widoku.

Co ja tu jest?

+0

zdefiniować przestrzenie nazw w kontroler trasy trasy. –

+0

spójrz na: http://laravel.com/docs/5.0/routing#route-model-binding –

+0

Dziękujemy za odpowiedź. Myślałem, że powiązanie modelu trasy jest konieczne tylko do przekazania całych obiektów do trasy, a nie tylko parametru całkowitego? Mimo to próbowałem zarejestrować model 'user'' App \ User' na routerze, ale nadal to nie działa. Próbowano również przetestować go z zamknięciem na trasie, zamiast wywoływać metodę kontrolerów. – Ben

Odpowiedz

49

Sposób route(), która jest wywoływana, gdy robisz ['route' => 'someroute'] w otworze formy, chce czegoś, co nazywa się nazwie trasy. Dajesz trasa nazwę tak:

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

Oznacza to, że sprawiają, że drugi argument trasy do tablicy, gdzie można określić zarówno nazwę trasy (as), a także co zrobić, gdy trasa jest trafiona (uses).

Następnie, po otwarciu formularza, zadzwonić trasy:

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

Teraz, na trasie bez parametrów, można po prostu zrobić 'route' => 'routename', ale skoro masz parametru zrobić tablicę zamiast i dostarczyć parametry w kolejności.

Wszystko, co powiedzieliśmy, ponieważ wydaje się, że aktualizujesz preferencje bieżącego użytkownika, zaleciłbym, aby kontroler obsługi sprawdził identyfikator aktualnie zalogowanego użytkownika i oparł aktualizację na tym - nie ma potrzeby, aby wyślij identyfikator w adresie URL i trasie, chyba że użytkownicy będą również musieli zaktualizować preferencje innych użytkowników. :)

+1

jako kontynuacja tego pytania, co się stanie, jeśli trasa jest trasą zasobów wygenerowaną na podstawie powiedz .. 'Route :: resource ('/ users', 'UserController');', a 'route: list' pokazuje, że ma nazwa 'users.update', ale kiedy próbuję wygenerować trasę, daje mi ten błąd .. czy' route() 'działa tylko dla jawnie nazwanych tras? – bruchowski

+0

nevermind, wykopano w źródle 'FormBuilder.php', wygląda na to działa' route: ['users.update', user] ' – bruchowski

0

Na marginesie:

miałem podobne problemy, gdzie wiele razy uzyskać metody działania błędu nie znaleziono, ale wyraźnie to określić w sterowniku.

Problem nie jest w sterowniku, ale raczej jak routes.php plik jest konfiguracja

Powiedzmy, że masz klasę Controller ustawione jako zasób w route.php pliku

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

następnie „/ przykład „będą musieli wymienić tutaj wszystkich relaksującego zasobu: http://laravel.com/docs/5.0/controllers#restful-resource-controllers

ale teraz chcesz mieć jakąś definicję w formie przykład:«działania»=>” ExampleController @ postStore”to trzeba zmienić tę trasę (w route.php pliku) do:

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

Ten wątek jest stary, ale był pierwszym, który pojawił się, więc pomyślałem, że podzieli się również moim rozwiązaniem. Oprócz nazwanych tras w twoim pliku routes.php.Ten błąd może również wystąpić, gdy masz zduplikowane adresy URL w pliku tras, ale pod różnymi nazwami błąd może wprowadzać w błąd w tym scenariuszu. Przykład

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


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

Zmiana nazw powoduje rozwiązanie problemu. Kopiuj wklejanie i zmęczenie doprowadzi Cię do tego problemu :).

+0

Rozwiązało to dla mnie problem, usunąłem trasę, którą utworzyłem dla rejestru (Route :: get ('/ register', 'Auth \ RegisterController @ getRegister');) i niech Auth :: routes() przejęcie kontroli – NZSteve

1

W moim przypadku rozwiązanie było proste:

Mam zdefiniowane trasę na samym początku pliku route.php.

Po przeniesieniu nazwanej trasy na dół moja aplikacja w końcu ją zobaczyła. Oznacza to, że jakoś droga została zdefiniowana zbyt wcześnie.

+0

yes in laravel 5 wystarczy użyć nazwy(). przykład: Route :: match (['get', 'post'], '/ dish/update/{id}', 'DishController @ storeUpdate') -> name ("route__name"); przekierowanie() -> trasa ("route__name", ['id' => $ site-> id]); –

2

Miałem ten sam problem i znalazłem rozwiązanie w ostatnim czasie.

należy sprawdzić, czy trasa jest raczej wewnątrz trasy :: grupa

jak tutaj:

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

jeśli więc należy używać go w pliku widoku. jak tutaj:

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