【问题标题】:How to pass an action via url in laravel?如何通过laravel中的url传递动作?
【发布时间】:2014-05-12 12:00:55
【问题描述】:

我的视图中有一个表单,我想在提交表单时调用我的操作并更新我的表格,但是当我提交表格时我的表格没有更新,并且表格将我重定向到 / users/{id} 所以这是我的操作:

public function userToadmin($id)
{
$service = User::find($id);
$service->role      = '0';
$service->save();

// redirect
Session::flash('message', 'Successfully granted the user!');
return Redirect::to('users');

这是我的表格:

{{ Form::open(array('title'=>'Add Admin Role','url' => 'userToadmin', 'class' => 'pull-left')) }}
{{ Form::hidden('_method', 'EDIT') }}
{{ Form::submit('', array('class' => 'update-event', 'data-title'=>'Delete User', 'data-content' => 'Are you sure you want to grant this user to admin ?', 'onClick'=>'return false;',)) }}
{{ Form::close() }}

这是我的路线:

Route::post('userToadmin', array('uses' => 'UserController@userToadmin'));

【问题讨论】:

  • 提交表单时发生了什么问题?
  • 你从哪里得到 $id?
  • userToadmin 函数需要一个路由参数 ($id),而您的路由中没有任何参数。你没有任何错误吗?
  • 呃,我认为 _method = 'EDIT' 会严重破坏您的系统。那应该是 POST、DELETE 等。另外,我不确定您是否将“url”传递给 Form::open() 助手。你从哪里得到所有这些代码?有点像你编造的,希望它能奏效,但也许我只是对这一切缺乏了解。

标签: php jquery ajax laravel laravel-4


【解决方案1】:

让我们从您在表单代码中使用的一些不良做法开始。

{{ Form::open(array('title'=>'Add Admin Role','url' => 'userToadmin', 'class' => 'pull-left')) }}

这应该使用路由名称而不是“url”。您可以查看如何执行此操作in the docs,但这里有一个示例说明您的路线应该是什么样子,以及您的表单中的相关输入:

//you should be using proper camel casing too...userToadmin should be userToAdmin
Route::post('userToAdmin', array('as' => 'user.makeAdmin', 'use' => 'UserController@userToAdmin'));

{{ Form::open(array('title'=>'Add Admin Role','route' => 'user.makeAdmin', 'class' => 'pull-left', 'method' => 'put')) }}

请注意,我还指定了处理表单时要使用的 HTTP 方法。默认情况下,Laravel 假定 PUT,但你可以根据需要指定它。无需为您的方法创建隐藏的表单字段。

另外,您如何使用Session with a redirect isn't the most efficient method。你应该这样做:

//in place of your redirect...assuming you have a route called 'users'
return Redirect::route('users')->with('message','Successfully granted the user!');

要专门解决不更新用户的问题...该代码应该可以很好地保存您的用户模型。您可能需要在更改 $service->role 之前和之后尝试 var_dump($service) 以确保您得到了预期的结果。

您的代码中的其他地方可能存在未传递正确用户 ID 的问题。

【讨论】:

    猜你喜欢
    • 2014-12-11
    • 1970-01-01
    • 2016-02-06
    • 2018-05-29
    • 1970-01-01
    • 2020-05-21
    • 2020-11-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多