laravel 从按钮点击的呼叫路由

dba5bblo  于 2022-12-30  发布在  其他
关注(0)|答案(5)|浏览(193)

我在我的一个项目中使用Laravel框架和刀片模板引擎,其中我有一条路径,看起来像

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

我在AdminController中有editProblem方法,它返回一个视图

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调用这个路由,我需要在路由上传递这些值。
我怎么能这么做呢?

ygya80vv

ygya80vv1#

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

要使用问题ID呼叫您的路由,您可以执行以下操作:

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

我使用了一个锚标签,但是它的呈现方式与button标签类似,因为我保留了您定义的样式类。

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

原因很简单,url方法会得到你控制器的完整url,如果你不使用这个方法,href链接会被附加到当前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'));
}
5t7ly7z5

5t7ly7z52#

试试这个:

<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中使用此路由,仅使用name for post,并同时获得这两个路由

    • GET路由示例:**
<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>

POST路径示例:
如果您通过提交按钮提交表格,请单击

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

dsekswqp3#

您需要创建一个指向此路由的链接:

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

rsl1atfo4#

要求查询路线。因此:

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

在 * web.php * 中

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

jckbn6z75#

我使用了下面的代码,它的工作。

<button class="btn border button" id="go-back-btn" onclick="window.location='{!! route('getDashboardScreen') !!}?MilkCompanyID={!!session('MilkCompanyID')!!}'">Go back</button>

相关问题