来自按钮点击的呼叫路由 laravel

Call route from button click laravel

我正在为我的一个项目使用 Laravel 框架和 blade 模板引擎,我的路线看起来像

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

我在 AdminController 中有 editProblem 方法,其中 returns 一个视图

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 调用此路由。我需要在路线上传递这些值。

我该怎么做?

您需要创建一个 link 到此路线:

<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>

在我看来,你应该使用 url() Laravel 方法

要用问题的 ID 给你打电话,你可以这样做:

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

我使用了锚标记,但它会像您的按钮标记一样呈现,因为我保留了您定义的相同样式class。

为什么要使用 url() 方法?

原因很简单,url 方法将获取完整的 url 到您的控制器。如果您不使用它,href link 将附加当前 url.

例如,假设您的按钮位于给定页面内

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'));
}

试试这个:

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

小建议: 当你在 laravel 中定义路线时,给它一个唯一的名字,它可以帮助你跟踪每个 url 像这样

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

现在你在 blade 中使用这个路由,只为 post 命名,并获得两个

Exmaple of GET route :

<button type="button" onclick="window.location='{{ route("showProblemEditPage",[$problemIdParameter]) }}'">Button</button>

<a href="{{ route("showProblemEditPage",[$problemIdParameter]) }}">Button</button>

<button type="button redirectToUrl" data-redirect-url="{{ route("showProblemEditPage",[$problemIdParameter]) }}">Button</button>
<script>
  $(document).on('click','.redirectToUrl',function(){
    let getRedirectUrl = $(this).attr('data-redirect-url');
    window.location.href= getRedirectUrl;
  });
</script>

Example of POST route :

如果您通过点击提交按钮提交表单

<form action={{ route('updateProblem',[$problemIdParameter]) }}>
  .....

  <button type="submit">Submit</button>
</form>

如果您通过 ajax 单击按钮提交表单

<form action={{ route('updateProblem',[$problemIdParameter]) }}>
  .....

  <button type="button" class="submitForm" >Submit</button>
</form>
<script>
   $(document).on('click','.submitForm',function(){
      let getForm = $(this).parents('form');
      let getFormActionUrl = getForm.attr('action');
      $.ajax({
          url: getFormActionUrl,
          .....
          .....
          .....
          .....
          .....
      });
   });
</script>

被要求查询路线。 这样 :

<button  onclick="window.location='{{ route("some_route_name") }}'"...>
</button>

web.php

Route::get('/some_route_url', [SomeRouteController::class,'some_func'])->name('some_route_name');