Маршрут не передает переменные в контроллер при использовании в blade-сервере - PullRequest
0 голосов
/ 09 мая 2019

Я использую именованный маршрут в представлении, передавая две переменные вместе с ним, но он выдает ошибку, что никакие аргументы не передаются.

Я знаю, что мог бы просто создать URL для href,но из того, что я прочитал до сих пор, это то, что я пытаюсь, тоже должно работать отлично (и я не вижу, что я делаю, отличается от примеров документации на самом деле).

ссылка в шоу.blade.php

<a href="{{ route('tasks.create', ['colony_slug' => $colony->slug, 'action_name' => 'change_name']) }}">Change Name</a>

в браузере ссылка отображается как

http://localhost/tasks/create?colony_slug=labr-oclh&action_name=change_name

route в web.php

Route::get('tasks/create/{colony_slug}/{action_name}', 'TaskController@create')->name('tasks.create');

TaskController @ create

// CREATE ACTION
// =========================================================================
    /**
     * Show the form for creating a new resource.
     *
     * @param string $colony_slug
     * @param string $action_name
     * 
     * @return \Illuminate\Http\Response
     */
    public function create($colony_slug, $action_name)
    {
        dd($colony_slug . " " . $action_name);
    }

ошибка

Too few arguments to function App\Http\Controllers\TaskController::create(), 0 passed and exactly 2 expected

список маршрутов

|        | GET|HEAD  | tasks                                    | tasks.index                      | App\Http\Controllers\TaskController@index                              | web,auth
         |
|        | POST      | tasks                                    | tasks.store                      | App\Http\Controllers\TaskController@store                              | web,auth
         |
|        | GET|HEAD  | tasks/create/{colony_slug}/{action_name} | tasks.create                     | App\Http\Controllers\TaskController@create                             | web,auth
         |
|        | PUT|PATCH | tasks/{task}                             | tasks.update                     | App\Http\Controllers\TaskController@update                             | web,auth
         |
|        | DELETE    | tasks/{task}                             | tasks.destroy                    | App\Http\Controllers\TaskController@destroy                            | web,auth
         |
|        | GET|HEAD  | tasks/{task}                             | tasks.show                       | App\Http\Controllers\TaskController@show                               | web,auth
         |
|        | GET|HEAD  | tasks/{task}/edit                        | tasks.edit                       | App\Http\Controllers\TaskController@edit                               | web,auth
         |
| 

Ответы [ 2 ]

1 голос
/ 09 мая 2019

Как выяснилось в комментариях, проблема заключается в том, что пользовательский маршрут конфликтует с маршрутом контроллера ресурсов. В частности, в имени маршрута (через named()), которое всегда должно быть уникальным, даже если они используют один и тот же URI.

Существует несколько решений, которые вы можете использовать, в зависимости от цели вашей функциональности:

Решение для: я хочу только один маршрут "Создать задачу"

Отключите маршрут task.create, созданный контроллером ресурсов, с помощью модификатора except():

Route::resource('tasks', 'TasksController')->except(['create']);

Оставьте другое определение маршрута как есть. Это удалит URI /tasks/create из вашего приложения и оставит один с дополнительными параметрами.

Решение для: я хочу использовать оба

Сами пути маршрутов в порядке и конфликтуют только по имени. Назовите свой собственный маршрут как-нибудь по-другому и используйте его, когда хотите использовать дополнительные параметры.

Route::get('tasks/create/{colony_slug}/{action_name}', 'TaskController@create')->name('tasks.create-custom');

Решение для: Я хочу указать значения по умолчанию в моей форме Создать задачу

Я предполагаю, что вы используете эти параметры, чтобы установить некоторые значения по умолчанию в форме «Создать задачу». Если это ваша конечная цель, то использование параметров маршрута + строки запроса контроллера по умолчанию будет работать одинаково хорошо и не потребует дополнительных маршрутов.

  1. Удалите ваш дополнительный маршрут и придерживайтесь значений по умолчанию из контроллера ресурсов

  2. Объявите Illuminate\Http\Request зависимость в вашем create() методе контроллера:

    public function create(Request $request)
    {
        // ...
    }
    
  3. Проверьте значения строки запроса в запросе и добавьте их в форму по умолчанию.

0 голосов
/ 09 мая 2019

Поскольку я смотрю на весь код, который вы предоставляете, он выглядит правильно для меня. Может быть, вам следует проверить файл маршрутов. Помните, что у маршрутов есть приоритет сверху до боттона, если у вас был другой маршрут с похожим именем , возможно, этот маршрут имеет приоритет над тем, который вы пытаетесь использовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...