在Cakephp 3.0中的插件中,可容纳的行为无效

时间:2015-12-24 14:50:45

标签: php orm cakephp-3.0

我正在开发cakephp 3.0,我喜欢使用插件,我以插件的形式编写了我的应用程序,我的问题是cakephp 3.0不允许整个插件中的可容纳行为及其显示模型未关联

我创建了两个插件Auth和Comments:

Auth插件中的控制器

  • UsersController
  • RolesCOntroller

Auth插件中的模型

在cakephp 3.0中,模型的变化与2.x相比,它们具有Entity和ModelTable,因此Auth Model Tables低于

  • UsersTable
  • RolesTable

UsersTable: -

            <?php
        namespace Auth\Model\Table;

        use Auth\Model\Entity\User;
        use Cake\ORM\Query;
        use Cake\ORM\RulesChecker;
        use Cake\ORM\Table;
        use Cake\Validation\Validator;


        class UsersTable extends Table
        {
            public function initialize(array $config)
            {
                parent::initialize($config);

                $this->table('users');
                $this->displayField('name');
                $this->primaryKey('id');

                $this->addBehavior('Timestamp');

                $this->belongsTo('Roles', [
                    'foreignKey' => 'role_id',
                    'joinType' => 'INNER',
                    'className' => 'Auth.Roles'
                ]);
                $this->hasMany('Comments', [
                    'foreignKey' => 'user_id',
                    'className' => 'Auth.Comments'
                ]);
                $this->hasMany('Contents', [
                    'foreignKey' => 'user_id',
                    'className' => 'Auth.Contents'
                ]);
            }


            public function validationDefault(Validator $validator)
            {
                return $validator;
            }


            public function buildRules(RulesChecker $rules)
            {
                $rules->add($rules->isUnique(['email']));
                $rules->add($rules->isUnique(['username']));
                $rules->add($rules->existsIn(['role_id'], 'Roles'));
                return $rules;
            }}

RolesTable

        <?php
        namespace Auth\Model\Table;

        use Auth\Model\Entity\Role;
        use Cake\ORM\Query;
        use Cake\ORM\RulesChecker;
        use Cake\ORM\Table;
        use Cake\Validation\Validator;


        class RolesTable extends Table
        {

            public function initialize(array $config)
            {
                parent::initialize($config);

                $this->table('roles');
                $this->displayField('id');
                $this->primaryKey('id');

                $this->addBehavior('Timestamp');

                $this->hasMany('Users', [
                    'foreignKey' => 'role_id',
                    'className' => 'Auth.Users'
                ]);
            }

            public function validationDefault(Validator $validator)
            {


                return $validator;
            }
        }

CommentsPlugin

评论插件中的控制器

  • CommentsController

评论插件中的模型

  • CommentsTable

        <?php
        namespace Comments\Model\Table;
    
        use Cake\ORM\Query;
        use Cake\ORM\RulesChecker;
        use Cake\ORM\Table;
        use Cake\Validation\Validator;
        use Comments\Model\Entity\Comment;
    
        class CommentsTable extends Table
        {
    
            public function initialize(array $config)
            {
                parent::initialize($config);
    
                $this->table('comments');
                $this->displayField('name');
                $this->primaryKey('id');
    
                $this->addBehavior('Timestamp');
                $this->addBehavior('Tree');
    
                $this->belongsTo('ParentComments', [
                    'className' => 'Comments.Comments',
                    'foreignKey' => 'parent_id'
                ]);
                $this->belongsTo('Users', [
                    'foreignKey' => 'user_id',
                    'className' => 'Comments.Users'
                ]);
                $this->belongsTo('Contents', [
                    'foreignKey' => 'content_id',
                    'joinType' => 'INNER',
                    'className' => 'Comments.Contents'
                ]);
                $this->hasMany('ChildComments', [
                    'className' => 'Comments.Comments',
                    'foreignKey' => 'parent_id'
                ]);
            }
    
            public function validationDefault(Validator $validator)
            {
    
                return $validator;
            }
    
            public function buildRules(RulesChecker $rules)
            {
                $rules->add($rules->isUnique(['email']));
                $rules->add($rules->existsIn(['parent_id'],       'ParentComments'));
                $rules->add($rules->existsIn(['user_id'], 'Users'));
                $rules->add($rules->existsIn(['content_id'], 'Contents'));
                return $rules;
            }
        }
    

现在我想在评论控制器中获取所有用户的相关数据,我这样做:

    $this->Comments->Users->find('all',[
       'contain'=>['Roles']
    ])

它的显示错误用户与角色无关但它在旧版本的cakephp(2.7)中工作

Users is not associated with Roles

1 个答案:

答案 0 :(得分:0)

不再有可包含的行为,contains现在是ORM的一部分,它通常适用于插件模型/关联。我建议开始调试非常具体的错误消息告诉你的内容,检查为什么Comment.Users和Comments.Contents使用自动表(\ Cake \ ORM \ Table的实例)而不是表类的具体实例!对我而言,您似乎想要使用Auth.Users而不是Comments.Users。

我从@ndm

所写问题的第一条评论中复制了这些内容