如何在laravel中通过url传递一个动作?

时间:2014-04-01 15:38:36

标签: php jquery ajax laravel laravel-4

我的视图中有一个表单,我想在提交表单时调用我的操作并更新我的表格,但是当我提交表单时,我的表格没有更新,表单重定向我到/ 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'));

1 个答案:

答案 0 :(得分:2)

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

{{ 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->角色之前和之后尝试使用var_dump($ service),以确保获得所期望的内容。

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