我安装了Laravel 4,我添加了Confide和Entrust个软件包。
我正在尝试构建管理界面来管理用户,角色和权限 我已经为权限创建了一个资源丰富的控制器,并且添加和销毁功能都可以正常工作,但编辑却没有。该记录未更新数据库中的值。
以下是我的控制器的代码:
<?php
class PermissionController extends BaseController {
protected $permission;
public function __construct(Permission $permission)
{
$this->permission = $permission;
}
...
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return Response
*/
public function edit($id)
{
$permission = $this->permission->find($id);
if (is_null($permission))
{
return Redirect::route('permissions.index');
}
return View::make('permissions.edit', compact('permission'));
}
/**
* Update the specified resource in storage.
*
* @param int $id
* @return Response
*/
public function update($id)
{
$input = array_except(Input::all(), '_method');
$validation = Validator::make($input, Permission::$rules);
if ($validation->passes())
{
$permission = $this->permission->find($id);
// create name from display_name
$input['name'] = $this->_machine_str($input['display_name']);
try {
$permission->update($input);
$queries = DB::getQueryLog();
$last_query = end($queries);
print_r($queries);
die();
} catch (Exception $e) {
var_dump($e->getTraceAsString());
die();
}
return Redirect::route('permissions.show', $id);
}
return Redirect::route('permissions.edit', $id)
->withInput()
->withErrors($validation)
->with('message', 'There were validation errors.');
}
...
}
模特:
<?php
use Zizaco\Entrust\EntrustPermission;
class Permission extends EntrustPermission
{
/**
*Soft delete enabled.
*
* @var boolean
*/
protected $softDelete = true;
protected $guarded = array('id');
/**
* Ardent validation rules
*
* @var array
*/
public static $rules = array(
'display_name' => 'required|between:4,32'
);
}
如果我更新模型以扩展Eloquent,则更新有效,因此我可能会对EntrustPermission模型进行处理。
我还检查了数据库调用,它只显示选择不是任何类型的更新。
答案 0 :(得分:1)
由于提及update()
方法的section in the docs位于标题保存模型和关系之下,我假设最好使用update()
方法用于更新模型的关系,并且没有明确记录。
如果您在更新Permission
模型的属性并使用save()
方法时采用“更多手动”方法,则可能会取得更大成功:
/**
* Update the specified resource in storage.
*
* @param int $id
* @return Response
*/
public function update($id)
{
$input = array_except(Input::all(), '_method');
$validation = Validator::make($input, Permission::$rules);
if ($validation->passes())
{
$permission = $this->permission->find($id);
// create name from display_name
$input['name'] = $this->_machine_str($input['display_name']);
try {
// Change to update attributes "manually"
$permission->name = $input['name'];
// Update any other attributes as necessary
$permission->any_other_attributes = $input['any_other_attributes']; // or Input::get('any_other_attributes')
// Finally, save (aka update) the Permission model's changes
$permission->save();
$queries = DB::getQueryLog();
$last_query = end($queries);
print_r($queries);
die();
} catch (Exception $e) {
var_dump($e->getTraceAsString());
die();
}
return Redirect::route('permissions.show', $id);
}
return Redirect::route('permissions.edit', $id)
->withInput()
->withErrors($validation)
->with('message', 'There were validation errors.');
}