Подтвердить что ты не робот

Маршрут 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 с заданным параметром и правильно установил это в представлении.

Что я здесь не вижу?

4b9b3361

Ответ 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.