Laravel 4中的Entrust权限更新未保存

时间:2013-07-10 11:51:46

标签: php laravel laravel-4

我安装了Laravel 4,我添加了ConfideEntrust个软件包。

我正在尝试构建管理界面来管理用户,角色和权限 我已经为权限创建了一个资源丰富的控制器,并且添加和销毁功能都可以正常工作,但编辑却没有。该记录未更新数据库中的值。

以下是我的控制器的代码:

<?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模型进行处理。

我还检查了数据库调用,它只显示选择不是任何类型的更新。

1 个答案:

答案 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.');
}