Как направить динамический URL? - PullRequest
0 голосов
/ 17 октября 2018

Я новичок в Laravel.Я определяю этот маршрут для кнопки редактирования:

<a href="/editTasks/{{ $task->id }}"><button class="btn btn-primary">Edit task</button></a>

URL генерируется нормально, но страница не найдена.Я возвращаю представление с моим TaskController@edit по этому маршруту:

Route::get('/editTasks/{{ $task->id }}', 'TaskController@edit');

Может ли кто-нибудь помочь мне понять, что я делаю неправильно?

Ответы [ 4 ]

0 голосов
/ 17 октября 2018

Лучше использовать «Привязка модели маршрута» .Ваш маршрут должен быть таким:

Route::get('/editTasks/{task}', 'TaskController@edit');

А в Controller используйте что-то вроде этого:

public function edit($task){

}
0 голосов
/ 17 октября 2018

нет, вы должны определить свой маршрут так:

Route::get('/editTasks/{id}', 'TaskController@edit');

у вас нет $ task на вашем маршруте, и вам не нужно писать что-либо другое в вашем маршруте.в вашем контроллере вы можете получить доступ к этому идентификатору следующим образом:

public function edit($taskId) {

}

и только вы делаете это

0 голосов
/ 17 октября 2018

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

В вашем примере это может быть допустимое объявление:

Route::get('/editTasks/{id}', 'TaskController@edit');

Дополнительную информацию можно найти вДокументы: https://laravel.com/docs/5.7/routing#route-parameters


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

Например:

// Route declaration
Route::get('/editTasks/{id}', 'TaskController@edit')->name('tasks.edit');

// In view
<a href="{{ route('tasks.edit', [$task->id]) }}">Edit task</a>
0 голосов
/ 17 октября 2018

Вам нужно использовать один { вместо двойного, поэтому в вашем маршруте должно быть следующее:

 Route::get('/editTasks/{taskId}', 'TaskController@edit');

И в вашей функции edit:

public function edit($taskId) { }

Двойной { в шаблоне является правильным, поскольку это указывает на получение переменной

Дополнительная информация / рекомендация:

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

Пример:

Если у вас есть маршрут с шаблоном /something/{var1}/something/{var2} и ваша функция public function test($variable2), он будет использовать var1 вместо var2.Поэтому лучше, чтобы эти имена совпадали, чтобы вы всегда получали ожидаемое значение в вашей функции.

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