2013-06-19 2 views
0

В настоящее время у меня установлены компоненты ACL Auth & в приложении CakePHP. У меня есть Group & User модель, настроенная как инициатор. Все это сработало нормально, таблица aros обновлялась должным образом всякий раз, когда была добавлена ​​новая группа. Например, это было бы мое содержание aros таблицы:Модельное поле в таблице AROs, не префиксное имя плагина

+----+-----------+-------+-------------+-------+------+------+ 
| id | parent_id | model | foreign_key | alias | lft | rght | 
+----+-----------+-------+-------------+-------+------+------+ 
| 1 |  NULL | Group |   1 | NULL | 1 | 2 | 
| 2 |  NULL | Group |   2 | NULL | 3 | 4 | 
| 3 |  NULL | Group |   3 | NULL | 5 | 6 | 
+----+-----------+-------+-------------+-------+------+------+ 

С тех пор я переработан вне User и Group модели в свой собственный плагин под названием «Обзор» (наряду с другими моделями, контроллеров, компонентов и т.д. .).

я сразу получил эту ошибку:

AclNode::node() - Couldn't find Aro node identified by "Array ([Aro0.model] => Group [Aro0.foreign_key] => 1) " 

Я обновил метод User::bindNode() включить префикс «Survey» на модели:

class User extends SurveyAppModel 
{ 
    // ... 

    public function bindNode($user) 
    { 
     return array('model' => 'Survey.Group', 'foreign_key' => $user['Survey.User']['group_id']); 
    } 

    //... 
} 

Я также изменил поле «модель» в таблица aros должна быть «Survey.Group» вместо «Group».

Это устранило ошибку, и моя авторизация и аутентификация снова работали. Моя проблема теперь возникает, когда я сохраняю новую запись в модели Group, поле модели в таблице aros имеет значение «Группа», а не «Survey.Group», поэтому я получаю ту же ошибку, что и раньше.

Так что мне интересно, как я могу это получить, чтобы при сохранении новой записи в модели группы она автоматически добавляет имя префикса плагина в поле «model»?

ответ

0

Я исправил это, установив свойство модели $name модели группы и предопределив ее именем плагина. Вам также нужно установить свойство $useTable, как если бы вы его не искали, он должен найти таблицу с именем my_plugin.my_model.

Например, это то, что я сейчас установил в моей модели группы, которая является частью плагина «Обследование».

class Group extends SurveyAppModel 
{ 
    // ... 

    public $name = 'Survey.Group'; 

    public $useTable = 'groups'; 

    // ... 
} 

Я обнаружил это, глядя через метод AclBehavior::afterSave(), там он сохраняет запись в таблице aros и использует $model->name свойство для поля модели.