Маршрут звонка от нажатия кнопки laravel

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

Route::get('/problems/{problem-id}/edit', 'AdminController@editProblem');

я имею editProblem метод в AdminController который возвращает вид

public function editProblem(Problem $problem) {
return view('admin.problem-edit', compact('problem'));
}

и у меня есть кнопка на виде, который выглядит как

<button class="btn btn-xs btn-info pull-right">Edit</button>

Теперь я хочу назвать этот маршрут с $problem->id когда кнопка будет нажата. Мне нужно передать эти значения по маршруту.

Как мне это сделать?

6

Решение

В моем мнении, вы должны использовать url () метод Laravel

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

<a href="{{ url('/problems/' . $problem->id . '/edit') }}" class="btn btn-xs btn-info pull-right">Edit</a>

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

Почему вы должны использовать метод url ()?

Причина проста, метод url получит полный URL к вашему контроллеру. Если вы не используете это, ссылка href будет добавлена ​​с текущим URL.

Например, кнопка supose you находится внутри данной страницы

yourdomain.com/a-given-page/

когда кто-то нажмет на вашу кнопку, результатом будет:

yourdomain.com/a-given-page/problems/{problem-id}/edit

когда вы хотели бы получить это:

yourdomain.com/problems/{problem-id}/edit

Некоторые соображения по поводу вашего метода editProblem

У вашего маршрута есть $ id, поэтому вам нужно получить этот $ id в вашем методе.

public function editProblem($problem_id) {

$problem = \App\Problem::find($problem_id); //If you have your model 'Problem' located in your App folder

return view('admin.problem-edit', compact('problem'));
}
7

Другие решения

Вам нужно будет создать ссылку на этот маршрут:

<a href="/problems/{{ $problem->id }}/edit" class="btn btn-xs btn-info pull-right">Edit</a>

Если вы используете именованные маршруты, это будет еще проще:

Route::get('/problems/{problem-id}/edit', ['as' => 'problems.edit', 'uses' => 'AdminController@editProblem']);

И тогда вам просто нужно позвонить route метод:

<a href="{{ route('problems.edit', $problem->id) }}" class="btn btn-xs btn-info pull-right">Edit</a>
2

Попробуй это:

<button type="button" onclick="window.location='{{ url("users/index") }}'">Button</button>

Маленькое предложение:
Когда вы определяете маршруты в laravel, дайте ему уникальное имя, это поможет вам отслеживать каждый URL, как это

Route::get('/problems/{problem-id}/edit', 'AdminController@editProblem')->name('pEdit');
Route::post('/problems/{problem-id}/edit', 'AdminController@editProblem')->name('pEdit');

Теперь вы используете этот маршрут в Blade с просто именем для сообщения и получите оба

<button type="button" onclick="window.location='{{ route("pEdit",array("parameter1")) }}'">Button</button>
2