来自按钮点击的呼叫路由 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');
我正在为我的一个项目使用 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');