Маршрут Laravel 5 не определен, хотя это так?
Я немного смущен тем, как это должно работать. Но я получаю ошибку Route [/preferences/1] not defined
.
В моих маршрутах .php у меня есть:
Route::patch('/preferences/{id}', '[email protected]');
И в файле вида (account/preferences.blade.php) у меня есть:
{!! Form::model(Auth::user(), ['method' => 'PATCH', 'route' => '/preferences/' . Auth::user()->id]) !!}
Я получаю сообщение о том, что маршрут не существует. Я думаю, что я неправильно понимаю документы по этой теме, но, на мой взгляд, я определил маршрут для запросов PATCH с заданным параметром и правильно установил это в представлении.
Что я здесь не вижу?
Ответы
Ответ 1
Метод route()
, который вызывается при выполнении ['route' => 'someroute']
при открытии формы, хочет, что называется именованным маршрутом. Вы даете маршруту такое имя:
Route::patch('/preferences/{id}',[
'as' => 'user.preferences.update',
'uses' => '[email protected]'
]);
Таким образом, вы делаете второй аргумент маршрута в массив, где вы указываете имя маршрута (as
), а также что делать, когда маршрут попадает (uses
).
Затем, когда вы открываете форму, вы вызываете маршрут:
{!! Form::model(Auth::user(), [
'method' => 'PATCH',
'route' => ['user.preferences.update', Auth::user()->id]
]) !!}
Теперь, для маршрута без параметров, вы могли бы просто сделать 'route' => 'routename'
, но поскольку у вас есть параметр, вы делаете массив и предоставляете параметры в порядке.
Все, что было сказано, поскольку вы, кажется, обновляете текущие настройки пользователя, я бы посоветовал вам позволить контроллеру обработки проверить идентификатор текущего пользователя, входящего в систему, и основывать его на этом - нет необходимости отправлять в идентификаторе в URL-адресе и маршруте, если вашим пользователям не потребуется обновлять предпочтения других пользователей.:)
Ответ 2
Эта ветка старая, но она была первой, и я подумал, что я тоже могу поделиться своим решением. Помимо названий маршрутов в файле routes.php. Эта ошибка также может возникать при наличии повторяющихся URL-адресов в вашем файле маршрутов, но с разными именами ошибка может вводить в заблуждение в этом сценарии. Пример
Route::any('official/form/reject-form}', '[email protected]')->name('reject-form');
Route::any('official/form/accept-form', '[email protected]')->name('reject-form');
Изменение имен решает проблему. Скопировать вставку и усталость поможет вам решить эту проблему:).
Ответ 3
Если маршрут не определен, проверьте файл маршрутизации web.php.
Route::get('/map', '[email protected]')->name('map'); // note the name() method.
Тогда вы можете использовать этот метод в представлениях:
<a class="nav-link" href="{{ route('map') }}">{{ __('Map') }}</a>
PS: __ ("Карта") переводит "Карту" на текущий язык.
И список имен для маршрутов вы можете увидеть с помощью команды ремесленника:
php artisan route:list
Ответ 4
У меня была такая же проблема и в последнее время найти решение.
вы должны проверить, находится ли ваш маршрут скорее внутри маршрута:: group
как здесь:
Route::group(['prefix' => 'Auth', 'as' => 'Auth.', 'namespace' => 'Auth', 'middleware' => 'Auth']
если это так, вы должны использовать его в файле вида. как здесь:
!! Form::model(Auth::user(), ['method' => 'PATCH', 'route' => 'Auth.preferences/' . Auth::user()->id]) !!}
Ответ 5
Мой случай немного отличается, так как это не форма, а возвращение представления. Добавить метод ->name('route')
.
MyView.blade.php
выглядит так:
<a href="{{route('admin')}}">CATEGORIES</a>
И web.php
маршрутов web.php
определяется так:
Route::view('admin', 'admin.index')->name('admin');
Ответ 6
Я использую Laravel 5.7 и попробовал все вышеперечисленные ответы, но, похоже, ничего не получилось.
Для меня это было довольно просто исправить, удалив файлы кеша, созданные Laravel.
Казалось, что мои изменения не отражаются, и поэтому мое приложение не видит маршруты.
Немного излишне, но я решил сбросить весь кэш одновременно, используя следующие команды:
php artisan route:clear
php artisan view:clear
php artisan cache:clear
Основной здесь является первая команда, которая bootstrap/cache/routes.php
файл bootstrap/cache/routes.php
.
Вторая команда удалит кэшированные файлы для представлений, которые хранятся в папке storage/framework/cache
.
Наконец, последняя команда очистит кэш приложения.
Ответ 7
В моем случае решение было простым:
Я определил маршрут в самом начале файла route.php
.
После переноса именованного маршрута в нижнее меню мое приложение, наконец, увидело его.
Это означает, что каким-то образом маршрут был определен слишком рано.
Ответ 8
На боковой ноте:
У меня были аналогичные проблемы, где много раз я получаю ошибку. Метод действий не найден, но, очевидно, он определяется в контроллере.
Проблема не в контроллере, а в том, как setup.php файл настроен
Предположим, что у вас есть класс Controller как ресурс в файле route.php
Route::resource('example', 'ExampleController');
тогда в '/example' будет указан весь ресурс RESTful:
http://laravel.com/docs/5.0/controllers#restful-resource-controllers
но теперь вы хотите иметь некоторое определение в форме, например: "action" = > "ExampleController @postStore", тогда вы должны изменить этот маршрут (в файле route.php) на:
Route::controller('example', 'ExampleController');
Ответ 9
У меня есть похожая проблема, которую я назвал post.show следующим образом:
<h3><a href="{{ route('post.show', ['id' => $post->id]) }}">{{ $post->title }}</a></h3>
Ответ 10
Обратите внимание, что команда
php artisan route:list
Или получить больше фильтра вниз по списку
php artisan route:list | grep your_route|your_controller
четвертый столбец сообщает имена зарегистрированных маршрутов (обычно генерируемых Route :: resource)
Ответ 11
когда вы выполняете команду
php artisan route:list
Вы будете все ваши зарегистрированные маршруты там в табличном формате.
Ну, там вы видите много столбцов, таких как Метод, URI, Имя, Действие и т.д.
Поэтому, если вы используете метод route(), это означает, что он будет принимать только значения столбца name и если вы хотите использовать значения столбца URI, вам следует использовать url() метод laravel.