需要帮助解决错误“sfGuardUser”上的未知记录属性/相关组件“权限”

时间:2012-03-13 06:55:27

标签: symfony1 symfony-1.4 sfguard sfdoctrineguard

我正在使用symfony1.4.16和Doctrine开发项目,并且我正在使用sfDoctrineGuardPlugin进行身份验证。在我的localhost它工作正常。当我在共享主机上移动我的项目时,我在登录时收到此错误(Unknown record property / related component "permissions" on "sfGuardUser")。当我在Google中搜索此错误时,很多人都在推荐delete all SFGuard Forms from lib/form/doctrine/base and reinstalling the plugin。如何在我的共享主机上重新安装它?我应该采取什么程序在我的共享主机上卸载它?我是否需要在我的localhost中重新安装它并将其上传到我的服务器,或者我应该使用命令symfony plugin:uninstall sfDoctrineGuardPlugin还是只删除lib/form/doctrine/base中的文件并将其再次上传到我的服务器。其他模块哪个与sfDoctrineGuardPlugin无关,工作正常。任何人请帮助我......

更多信息

当我登录时,我收到错误Unknown record property / related component "permissions" on "sfGuardUser",当我刷新页面时,错误消失了,我正在重定向到主页。在主页我有

的链接
  1. 添加用户,群组,权限
  2. 编辑用户,群组,权限
  3. 列出用户,组,权限 当我试图访问添加或编辑部分我得到这样的错误。列表和删除部分工作正常

    这里我附上错误和错误日志的屏幕截图。

    1。error page 2。error log

  4. **

    BaseSfGuardUser.class

    **

    <?php
    // Connection Component Binding
    Doctrine_Manager::getInstance()->bindComponent('SfGuardUser', 'doctrine');
    
    /**
     * BaseSfGuardUser
     * 
     * This class has been auto-generated by the Doctrine ORM Framework
     * 
     * @property integer $id
     * @property string $first_name
     * @property string $last_name
     * @property string $email_address
     * @property string $username
     * @property string $algorithm
     * @property string $salt
     * @property string $password
     * @property integer $is_active
     * @property integer $is_super_admin
     * @property timestamp $last_login
     * @property timestamp $created_at
     * @property timestamp $updated_at
     * @property Doctrine_Collection $SfGuardForgotPassword
     * @property Doctrine_Collection $SfGuardRememberKey
     * @property Doctrine_Collection $SfGuardUserGroup
     * @property Doctrine_Collection $SfGuardUserPermission
     * 
     * @method integer             getId()                    Returns the current record's "id" value
     * @method string              getFirstName()             Returns the current record's "first_name" value
     * @method string              getLastName()              Returns the current record's "last_name" value
     * @method string              getEmailAddress()          Returns the current record's "email_address" value
     * @method string              getUsername()              Returns the current record's "username" value
     * @method string              getAlgorithm()             Returns the current record's "algorithm" value
     * @method string              getSalt()                  Returns the current record's "salt" value
     * @method string              getPassword()              Returns the current record's "password" value
     * @method integer             getIsActive()              Returns the current record's "is_active" value
     * @method integer             getIsSuperAdmin()          Returns the current record's "is_super_admin" value
     * @method timestamp           getLastLogin()             Returns the current record's "last_login" value
     * @method timestamp           getCreatedAt()             Returns the current record's "created_at" value
     * @method timestamp           getUpdatedAt()             Returns the current record's "updated_at" value
     * @method Doctrine_Collection getSfGuardForgotPassword() Returns the current record's "SfGuardForgotPassword" collection
     * @method Doctrine_Collection getSfGuardRememberKey()    Returns the current record's "SfGuardRememberKey" collection
     * @method Doctrine_Collection getSfGuardUserGroup()      Returns the current record's "SfGuardUserGroup" collection
     * @method Doctrine_Collection getSfGuardUserPermission() Returns the current record's "SfGuardUserPermission" collection
     * @method SfGuardUser         setId()                    Sets the current record's "id" value
     * @method SfGuardUser         setFirstName()             Sets the current record's "first_name" value
     * @method SfGuardUser         setLastName()              Sets the current record's "last_name" value
     * @method SfGuardUser         setEmailAddress()          Sets the current record's "email_address" value
     * @method SfGuardUser         setUsername()              Sets the current record's "username" value
     * @method SfGuardUser         setAlgorithm()             Sets the current record's "algorithm" value
     * @method SfGuardUser         setSalt()                  Sets the current record's "salt" value
     * @method SfGuardUser         setPassword()              Sets the current record's "password" value
     * @method SfGuardUser         setIsActive()              Sets the current record's "is_active" value
     * @method SfGuardUser         setIsSuperAdmin()          Sets the current record's "is_super_admin" value
     * @method SfGuardUser         setLastLogin()             Sets the current record's "last_login" value
     * @method SfGuardUser         setCreatedAt()             Sets the current record's "created_at" value
     * @method SfGuardUser         setUpdatedAt()             Sets the current record's "updated_at" value
     * @method SfGuardUser         setSfGuardForgotPassword() Sets the current record's "SfGuardForgotPassword" collection
     * @method SfGuardUser         setSfGuardRememberKey()    Sets the current record's "SfGuardRememberKey" collection
     * @method SfGuardUser         setSfGuardUserGroup()      Sets the current record's "SfGuardUserGroup" collection
     * @method SfGuardUser         setSfGuardUserPermission() Sets the current record's "SfGuardUserPermission" collection
     * 
     * @package    ticketsystem
     * @subpackage model
     * @author     Your name here
     * @version    SVN: $Id: Builder.php 7490 2010-03-29 19:53:27Z jwage $
     */
    abstract class BaseSfGuardUser extends sfDoctrineRecord
    {
        public function setTableDefinition()
        {
            $this->setTableName('sf_guard_user');
            $this->hasColumn('id', 'integer', 8, array(
                 'type' => 'integer',
                 'fixed' => 0,
                 'unsigned' => false,
                 'primary' => true,
                 'autoincrement' => true,
                 'length' => 8,
                 ));
            $this->hasColumn('first_name', 'string', 255, array(
                 'type' => 'string',
                 'fixed' => 0,
                 'unsigned' => false,
                 'primary' => false,
                 'notnull' => false,
                 'autoincrement' => false,
                 'length' => 255,
                 ));
            $this->hasColumn('last_name', 'string', 255, array(
                 'type' => 'string',
                 'fixed' => 0,
                 'unsigned' => false,
                 'primary' => false,
                 'notnull' => false,
                 'autoincrement' => false,
                 'length' => 255,
                 ));
            $this->hasColumn('email_address', 'string', 255, array(
                 'type' => 'string',
                 'fixed' => 0,
                 'unsigned' => false,
                 'primary' => false,
                 'notnull' => true,
                 'autoincrement' => false,
                 'length' => 255,
                 ));
            $this->hasColumn('username', 'string', 128, array(
                 'type' => 'string',
                 'fixed' => 0,
                 'unsigned' => false,
                 'primary' => false,
                 'notnull' => true,
                 'autoincrement' => false,
                 'length' => 128,
                 ));
            $this->hasColumn('algorithm', 'string', 128, array(
                 'type' => 'string',
                 'fixed' => 0,
                 'unsigned' => false,
                 'primary' => false,
                 'default' => 'sha1',
                 'notnull' => true,
                 'autoincrement' => false,
                 'length' => 128,
                 ));
            $this->hasColumn('salt', 'string', 128, array(
                 'type' => 'string',
                 'fixed' => 0,
                 'unsigned' => false,
                 'primary' => false,
                 'notnull' => false,
                 'autoincrement' => false,
                 'length' => 128,
                 ));
            $this->hasColumn('password', 'string', 128, array(
                 'type' => 'string',
                 'fixed' => 0,
                 'unsigned' => false,
                 'primary' => false,
                 'notnull' => false,
                 'autoincrement' => false,
                 'length' => 128,
                 ));
            $this->hasColumn('is_active', 'integer', 1, array(
                 'type' => 'integer',
                 'fixed' => 0,
                 'unsigned' => false,
                 'primary' => false,
                 'default' => '1',
                 'notnull' => false,
                 'autoincrement' => false,
                 'length' => 1,
                 ));
            $this->hasColumn('is_super_admin', 'integer', 1, array(
                 'type' => 'integer',
                 'fixed' => 0,
                 'unsigned' => false,
                 'primary' => false,
                 'default' => '0',
                 'notnull' => false,
                 'autoincrement' => false,
                 'length' => 1,
                 ));
            $this->hasColumn('last_login', 'timestamp', 25, array(
                 'type' => 'timestamp',
                 'fixed' => 0,
                 'unsigned' => false,
                 'primary' => false,
                 'notnull' => false,
                 'autoincrement' => false,
                 'length' => 25,
                 ));
            $this->hasColumn('created_at', 'timestamp', 25, array(
                 'type' => 'timestamp',
                 'fixed' => 0,
                 'unsigned' => false,
                 'primary' => false,
                 'notnull' => true,
                 'autoincrement' => false,
                 'length' => 25,
                 ));
            $this->hasColumn('updated_at', 'timestamp', 25, array(
                 'type' => 'timestamp',
                 'fixed' => 0,
                 'unsigned' => false,
                 'primary' => false,
                 'notnull' => true,
                 'autoincrement' => false,
                 'length' => 25,
                 ));
        }
    
        public function setUp()
        {
            parent::setUp();
            $this->hasMany('SfGuardForgotPassword', array(
                 'local' => 'id',
                 'foreign' => 'user_id',
                 'onDelete' => 'CASCADE'));
    
            $this->hasMany('SfGuardRememberKey', array(
                 'local' => 'id',
                 'foreign' => 'user_id',
                 'onDelete' => 'CASCADE'));
    
            $this->hasMany('SfGuardUserGroup', array(
                 'local' => 'id',
                 'foreign' => 'user_id',
                 'onDelete' => 'CASCADE'));
    
            $this->hasMany('SfGuardUserPermission', array(
                 'local' => 'id',
                 'foreign' => 'user_id',
                 'onDelete' => 'CASCADE'));
        }
    }
    

    **

    BaseSfGuardUserForm.class

    **

    <?php
    
    /**
     * SfGuardUser form base class.
     *
     * @method SfGuardUser getObject() Returns the current form's model object
     *
     * @package    ticketsystem
     * @subpackage form
     * @author     Your name here
     * @version    SVN: $Id: sfDoctrineFormGeneratedTemplate.php 29553 2010-05-20 14:33:00Z Kris.Wallsmith $
     */
    abstract class BaseSfGuardUserForm extends BaseFormDoctrine
    {
      public function setup()
      {
        $this->setWidgets(array(
          'id'               => new sfWidgetFormInputHidden(),
          'first_name'       => new sfWidgetFormInputText(),
          'last_name'        => new sfWidgetFormInputText(),
          'email_address'    => new sfWidgetFormInputText(),
          'username'         => new sfWidgetFormInputText(),
          'algorithm'        => new sfWidgetFormInputText(),
          'salt'             => new sfWidgetFormInputText(),
          'password'         => new sfWidgetFormInputText(),
          'is_active'        => new sfWidgetFormInputCheckbox(),
          'is_super_admin'   => new sfWidgetFormInputCheckbox(),
          'last_login'       => new sfWidgetFormDateTime(),
          'created_at'       => new sfWidgetFormDateTime(),
          'updated_at'       => new sfWidgetFormDateTime(),
          'groups_list'      => new sfWidgetFormDoctrineChoice(array('multiple' => true, 'model' => 'sfGuardGroup')),
          'permissions_list' => new sfWidgetFormDoctrineChoice(array('multiple' => true, 'model' => 'sfGuardPermission')),
        ));
    
        $this->setValidators(array(
          'id'               => new sfValidatorChoice(array('choices' => array($this->getObject()->get('id')), 'empty_value' => $this->getObject()->get('id'), 'required' => false)),
          'first_name'       => new sfValidatorString(array('max_length' => 255, 'required' => false)),
          'last_name'        => new sfValidatorString(array('max_length' => 255, 'required' => false)),
          'email_address'    => new sfValidatorString(array('max_length' => 255)),
          'username'         => new sfValidatorString(array('max_length' => 128)),
          'algorithm'        => new sfValidatorString(array('max_length' => 128, 'required' => false)),
          'salt'             => new sfValidatorString(array('max_length' => 128, 'required' => false)),
          'password'         => new sfValidatorString(array('max_length' => 128, 'required' => false)),
          'is_active'        => new sfValidatorBoolean(array('required' => false)),
          'is_super_admin'   => new sfValidatorBoolean(array('required' => false)),
          'last_login'       => new sfValidatorDateTime(array('required' => false)),
          'created_at'       => new sfValidatorDateTime(),
          'updated_at'       => new sfValidatorDateTime(),
          'groups_list'      => new sfValidatorDoctrineChoice(array('multiple' => true, 'model' => 'sfGuardGroup', 'required' => false)),
          'permissions_list' => new sfValidatorDoctrineChoice(array('multiple' => true, 'model' => 'sfGuardPermission', 'required' => false)),
        ));
    
        $this->validatorSchema->setPostValidator(
          new sfValidatorAnd(array(
            new sfValidatorDoctrineUnique(array('model' => 'SfGuardUser', 'column' => array('email_address'))),
            new sfValidatorDoctrineUnique(array('model' => 'SfGuardUser', 'column' => array('username'))),
          ))
        );
    
        $this->widgetSchema->setNameFormat('sf_guard_user[%s]');
    
        $this->errorSchema = new sfValidatorErrorSchema($this->validatorSchema);
    
        $this->setupInheritance();
    
        parent::setup();
      }
    
      public function getModelName()
      {
        return 'SfGuardUser';
      }
    
      public function updateDefaultsFromObject()
      {
        parent::updateDefaultsFromObject();
    
        if (isset($this->widgetSchema['groups_list']))
        {
          $this->setDefault('groups_list', $this->object->Groups->getPrimaryKeys());
        }
    
        if (isset($this->widgetSchema['permissions_list']))
        {
          $this->setDefault('permissions_list', $this->object->Permissions->getPrimaryKeys());
        }
    
      }
    
      protected function doSave($con = null)
      {
        $this->saveGroupsList($con);
        $this->savePermissionsList($con);
    
        parent::doSave($con);
      }
    
      public function saveGroupsList($con = null)
      {
        if (!$this->isValid())
        {
          throw $this->getErrorSchema();
        }
    
        if (!isset($this->widgetSchema['groups_list']))
        {
          // somebody has unset this widget
          return;
        }
    
        if (null === $con)
        {
          $con = $this->getConnection();
        }
    
        $existing = $this->object->Groups->getPrimaryKeys();
        $values = $this->getValue('groups_list');
        if (!is_array($values))
        {
          $values = array();
        }
    
        $unlink = array_diff($existing, $values);
        if (count($unlink))
        {
          $this->object->unlink('Groups', array_values($unlink));
        }
    
        $link = array_diff($values, $existing);
        if (count($link))
        {
          $this->object->link('Groups', array_values($link));
        }
      }
    
      public function savePermissionsList($con = null)
      {
        if (!$this->isValid())
        {
          throw $this->getErrorSchema();
        }
    
        if (!isset($this->widgetSchema['permissions_list']))
        {
          // somebody has unset this widget
          return;
        }
    
        if (null === $con)
        {
          $con = $this->getConnection();
        }
    
        $existing = $this->object->Permissions->getPrimaryKeys();
        $values = $this->getValue('permissions_list');
        if (!is_array($values))
        {
          $values = array();
        }
    
        $unlink = array_diff($existing, $values);
        if (count($unlink))
        {
          $this->object->unlink('Permissions', array_values($unlink));
        }
    
        $link = array_diff($values, $existing);
        if (count($link))
        {
          $this->object->link('Permissions', array_values($link));
        }
      }
    
    }
    

    这里我也附加了我的数据库架构

    **

    的schema.yml

    **

    SfGuardForgotPassword:
      connection: doctrine
      tableName: sf_guard_forgot_password
      columns:
        id:
          type: integer(8)
          fixed: false
          unsigned: false
          primary: true
          autoincrement: true
        user_id:
          type: integer(8)
          fixed: false
          unsigned: false
          primary: false
          notnull: true
          autoincrement: false
        unique_key:
          type: string(255)
          fixed: false
          unsigned: false
          primary: false
          notnull: false
          autoincrement: false
        expires_at:
          type: timestamp(25)
          fixed: false
          unsigned: false
          primary: false
          notnull: true
          autoincrement: false
        created_at:
          type: timestamp(25)
          fixed: false
          unsigned: false
          primary: false
          notnull: true
          autoincrement: false
        updated_at:
          type: timestamp(25)
          fixed: false
          unsigned: false
          primary: false
          notnull: true
          autoincrement: false
      relations:
        SfGuardUser:
          local: user_id
          foreign: id
          type: one
    SfGuardGroup:
      connection: doctrine
      tableName: sf_guard_group
      columns:
        id:
          type: integer(8)
          fixed: false
          unsigned: false
          primary: true
          autoincrement: true
        name:
          type: string(255)
          fixed: false
          unsigned: false
          primary: false
          notnull: false
          autoincrement: false
        description:
          type: string()
          fixed: false
          unsigned: false
          primary: false
          notnull: false
          autoincrement: false
        created_at:
          type: timestamp(25)
          fixed: false
          unsigned: false
          primary: false
          notnull: true
          autoincrement: false
        updated_at:
          type: timestamp(25)
          fixed: false
          unsigned: false
          primary: false
          notnull: true
          autoincrement: false
      relations:
        SfGuardGroupPermission:
          local: id
          foreign: group_id
          type: many
        SfGuardUserGroup:
          local: id
          foreign: group_id
          type: many
    SfGuardGroupPermission:
      connection: doctrine
      tableName: sf_guard_group_permission
      columns:
        group_id:
          type: integer(8)
          fixed: false
          unsigned: false
          primary: true
          autoincrement: false
        permission_id:
          type: integer(8)
          fixed: false
          unsigned: false
          primary: true
          autoincrement: false
        created_at:
          type: timestamp(25)
          fixed: false
          unsigned: false
          primary: false
          notnull: true
          autoincrement: false
        updated_at:
          type: timestamp(25)
          fixed: false
          unsigned: false
          primary: false
          notnull: true
          autoincrement: false
      relations:
        SfGuardGroup:
          local: group_id
          foreign: id
          type: one
        SfGuardPermission:
          local: permission_id
          foreign: id
          type: one
    SfGuardPermission:
      connection: doctrine
      tableName: sf_guard_permission
      columns:
        id:
          type: integer(8)
          fixed: false
          unsigned: false
          primary: true
          autoincrement: true
        name:
          type: string(255)
          fixed: false
          unsigned: false
          primary: false
          notnull: false
          autoincrement: false
        description:
          type: string()
          fixed: false
          unsigned: false
          primary: false
          notnull: false
          autoincrement: false
        created_at:
          type: timestamp(25)
          fixed: false
          unsigned: false
          primary: false
          notnull: true
          autoincrement: false
        updated_at:
          type: timestamp(25)
          fixed: false
          unsigned: false
          primary: false
          notnull: true
          autoincrement: false
      relations:
        SfGuardGroupPermission:
          local: id
          foreign: permission_id
          type: many
        SfGuardUserPermission:
          local: id
          foreign: permission_id
          type: many
    SfGuardRememberKey:
      connection: doctrine
      tableName: sf_guard_remember_key
      columns:
        id:
          type: integer(8)
          fixed: false
          unsigned: false
          primary: true
          autoincrement: true
        user_id:
          type: integer(8)
          fixed: false
          unsigned: false
          primary: false
          notnull: false
          autoincrement: false
        remember_key:
          type: string(32)
          fixed: false
          unsigned: false
          primary: false
          notnull: false
          autoincrement: false
        ip_address:
          type: string(50)
          fixed: false
          unsigned: false
          primary: false
          notnull: false
          autoincrement: false
        created_at:
          type: timestamp(25)
          fixed: false
          unsigned: false
          primary: false
          notnull: true
          autoincrement: false
        updated_at:
          type: timestamp(25)
          fixed: false
          unsigned: false
          primary: false
    
          notnull: true
          autoincrement: false
      relations:
        SfGuardUser:
          local: user_id
          foreign: id
          type: one
    SfGuardUser:
      connection: doctrine
      tableName: sf_guard_user
      columns:
        id:
          type: integer(8)
          fixed: false
          unsigned: false
          primary: true
          autoincrement: true
        first_name:
          type: string(255)
          fixed: false
          unsigned: false
          primary: false
          notnull: false
          autoincrement: false
        last_name:
          type: string(255)
          fixed: false
          unsigned: false
          primary: false
          notnull: false
          autoincrement: false
        email_address:
          type: string(255)
          fixed: false
          unsigned: false
          primary: false
          notnull: true
          autoincrement: false
        username:
          type: string(128)
          fixed: false
          unsigned: false
          primary: false
          notnull: true
          autoincrement: false
        algorithm:
          type: string(128)
          fixed: false
          unsigned: false
          primary: false
          default: sha1
          notnull: true
          autoincrement: false
        salt:
          type: string(128)
          fixed: false
          unsigned: false
          primary: false
          notnull: false
          autoincrement: false
        password:
          type: string(128)
          fixed: false
          unsigned: false
          primary: false
          notnull: false
          autoincrement: false
        is_active:
          type: integer(1)
          fixed: false
          unsigned: false
          primary: false
          default: '1'
          notnull: false
          autoincrement: false
        is_super_admin:
          type: integer(1)
          fixed: false
          unsigned: false
          primary: false
          default: '0'
          notnull: false
          autoincrement: false
        last_login:
          type: timestamp(25)
          fixed: false
          unsigned: false
          primary: false
          notnull: false
          autoincrement: false
        created_at:
          type: timestamp(25)
          fixed: false
          unsigned: false
          primary: false
          notnull: true
          autoincrement: false
        updated_at:
          type: timestamp(25)
          fixed: false
          unsigned: false
          primary: false
          notnull: true
          autoincrement: false
      relations:
        SfGuardForgotPassword:
          local: id
          foreign: user_id
          type: many
        SfGuardRememberKey:
          local: id
          foreign: user_id
          type: many
        SfGuardUserGroup:
          local: id
          foreign: user_id
          type: many
        SfGuardUserPermission:
          local: id
          foreign: user_id
          type: many
    SfGuardUserGroup:
      connection: doctrine
      tableName: sf_guard_user_group
      columns:
        user_id:
          type: integer(8)
          fixed: false
          unsigned: false
          primary: true
          autoincrement: false
        group_id:
          type: integer(8)
          fixed: false
          unsigned: false
          primary: true
          autoincrement: false
        created_at:
          type: timestamp(25)
          fixed: false
          unsigned: false
          primary: false
          notnull: true
          autoincrement: false
        updated_at:
          type: timestamp(25)
          fixed: false
          unsigned: false
          primary: false
          notnull: true
          autoincrement: false
      relations:
        SfGuardGroup:
          local: group_id
          foreign: id
          type: one
        SfGuardUser:
          local: user_id
          foreign: id
          type: one
    SfGuardUserPermission:
      connection: doctrine
      tableName: sf_guard_user_permission
      columns:
        user_id:
          type: integer(8)
          fixed: false
          unsigned: false
          primary: true
          autoincrement: false
        permission_id:
          type: integer(8)
          fixed: false
          unsigned: false
          primary: true
          autoincrement: false
        created_at:
          type: timestamp(25)
          fixed: false
          unsigned: false
          primary: false
          notnull: true
          autoincrement: false
        updated_at:
          type: timestamp(25)
          fixed: false
          unsigned: false
          primary: false
          notnull: true
          autoincrement: false
      relations:
        SfGuardPermission:
          local: permission_id
          foreign: id
          type: one
        SfGuardUser:
          local: user_id
          foreign: id
          type: one
    

    谢谢

2 个答案:

答案 0 :(得分:4)

  1. 清除symfony缓存
  2. 删除sfDoctrineGuardPlugin的基本模型:
  3. lib/model/doctrine/sfDoctrineGuardPLugin/base/

    1. 使用命令行重建模型:
    2. $ php symfony doctrine:build-model

      1. 使用命令行
      2. 重建数据库

        $ php symfony doctrine:build-sql
        $ php symfony doctrine:insert-sql

答案 1 :(得分:0)

在我的服务器迁移期间,由于其他原因,我看到了同样的错误。新服务器运行的是PHP 7.0,但我通过降级到PHP 5.6(instructions here之后)来实现它。