从按钮单击laravel调用路由

rim*_*fiz 7 php routes laravel laravel-5 balde

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

Route::get('/problems/{problem-id}/edit', 'AdminController@editProblem');
Run Code Online (Sandbox Code Playgroud)

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

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

我在视图上有一个看起来像的按钮

<button class="btn btn-xs btn-info pull-right">Edit</button>
Run Code Online (Sandbox Code Playgroud)

现在我想$problem->id用点击按钮的时候调用这条路线.我需要在路线上传递这些值.

我怎样才能做到这一点?

Ger*_*ais 9

在我的意见中,你应该使用url()Laravel方法

要使用问题的ID给您打电话,您可以执行以下操作:

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

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

为什么要使用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'));
}
Run Code Online (Sandbox Code Playgroud)


Lui*_*lin 5

您需要创建指向此路线的链接:

<a href="/problems/{{ $problem->id }}/edit" class="btn btn-xs btn-info pull-right">Edit</a>
Run Code Online (Sandbox Code Playgroud)

如果您使用命名路由,这将更容易:

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

然后你只需要调用该route方法:

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


Vip*_*pro 5

尝试这个:

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

小建议: 当您在laravel中定义路由时,给它一个唯一的名称,它可以帮助您像这样跟踪每个URL

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

现在,您可以在Blade中使用此路由,仅使用发布名称,并同时获取

<button type="button" onclick="window.location='{{ route("pEdit",array("parameter1")) }}'">Button</button>
Run Code Online (Sandbox Code Playgroud)