Я хочу приписать некоторые теги некоторым объектам моей модели доктрины.
Я нашел sfDoctrineActAsTaggablePlugin , который, кажется, именно то, что мне нужно.
Проблема в том, что когда я хочу сохранить объект Taggable, я получаю эту ошибку:
Unknown record property / related component "saved_tags" on "Mishidea"
Mishidea - это имя класса / таблицы, которую я хочу пометить тегами.
Вот соответствующая часть моего файла schema.yml:
Mishidea:
connection: doctrine
actAs: {Timestampable: ~ , Taggable: ~ }
tableName: mishidea
columns:
idea_id:
type: integer(4)
primary: true
autoincrement: true
idea_title:
type: string()
notnull: true
primary: false
idea_summary:
type: string()
notnull: true
primary: false
idea_description:
type: string()
notnull: true
primary: false
idea_up:
type: integer(8)
notnull: true
default: 0
primary: false
idea_down:
type: integer(8)
notnull: true
default: 0
primary: false
idea_confirmation:
type: boolean(1)
default: false
primary: false
group_id:
type: integer(4)
notnull: false
primary: false
relations:
Mishgroup:
local: group_id
foreign: group_id
type: one
Ideacomment:
local: idea_id
foreign: idea_id
type: many
Mishdocument:
local: idea_id
foreign: idea_id
type: many
RelIdeafollower:
local: idea_id
foreign: idea_id
type: many
Я также пробовал другие типы синтаксиса для атрибута actAs класса, такие как:
actAs:
Timestampable: ~
Taggable: ~
и
actAs:[Timestampable,Taggable]
Но это не проблема, как я понимаю:
$timestampable0 = new Doctrine_Template_Timestampable();
$taggable0 = new Taggable();
$this->actAs($timestampable0);
$this->actAs($taggable0);
в классе BaseMishidea.php моей модели.
Я не понимаю, почему класс Mishidea не получает атрибуты, которые класс Taggable должен добавить к нему, поскольку модель, похоже, добавляет поведение с помощью оператора $ this-> actAs ().
Как заставить этот плагин работать?
Если это поможет, я использую Symfony 1.4 с MySQL / InnoDB, и я пробовал ранее с СУБД PostgreSql, с тем же результатом.
Ваша помощь будет принята с благодарностью.
Спасибо
FuzzyTern
EDIT1 - Относительно того, что сказал Джон: Может ли кто-нибудь подтвердить, что поведение Taggable добавлено в файл schema.yml через «actAs:», а не «templates:»? Это то, что я читаю здесь и там (см. Мой комментарий к сообщению Джонвардса), но так как ни одно из обоих решений не работает для меня, я не уверен. При использовании ключевого слова "templates" я получаю:
Unknown method Mishidea::addTag
и конкретные классы модели не генерируются.
EDIT2 - После дальнейшего расследования я обнаружил, что трассировка стека Symfony интересна.
Действительно, когда я делаю:
$idea = new Mishidea();
$idea->save();
вызывается TaggableListener (точка 8 на трассировке стека ниже), который показывает, что отношение работает. Но тогда я не понимаю, что происходит и приводит к исключению.
Трассировка стека:
1. at ()
in SF_ROOT_DIR/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Record/Filter/Standard.php line 55 ...
public function filterGet(Doctrine_Record $record, $name)
{
throw new Doctrine_Record_UnknownPropertyException(sprintf('Unknown record property / related component "%s" on "%s"', $name, get_class($record)));
}
}
2. at Doctrine_Record_Filter_Standard->filterGet(object('Mishidea'), 'saved_tags')
in SF_ROOT_DIR/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Record.php line 1374 ...
3. at Doctrine_Record->_get('saved_tags', 1)
in SF_ROOT_DIR/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Record.php line 1333 ...
4. at Doctrine_Record->get('saved_tags')
in n/a line n/a ...
5. at call_user_func_array(array(object('Mishidea'), 'get'), array('saved_tags'))
in SF_ROOT_DIR/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/record/sfDoctrineRecord.class.php line 212 ...
6. at sfDoctrineRecord->__call('getSavedTags', array())
in n/a line n/a ...
7. at Mishidea->getSavedTags()
in SF_ROOT_DIR/plugins/sfDoctrineActAsTaggablePlugin/lib/TaggableTemplate.class.php line 93 ...
8. at TaggableListener->postSave(object('Doctrine_Event'))
in SF_ROOT_DIR/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Record/Listener/Chain.php line 237 ...
9. at Doctrine_Record_Listener_Chain->postSave(object('Doctrine_Event'))
in SF_ROOT_DIR/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Record.php line 355 ...
10. at Doctrine_Record->invokeSaveHooks('post', 'save', object('Doctrine_Event'))
in SF_ROOT_DIR/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection/UnitOfWork.php line 112 ...
11. at Doctrine_Connection_UnitOfWork->saveGraph(object('Mishidea'))
in SF_ROOT_DIR/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Record.php line 1691 ...
12. at Doctrine_Record->save()
in SF_ROOT_DIR/apps/frontend/modules/idea/actions/actions.class.php line 24 ...
Если кто-то хочет увидеть код для любой точки трассировки стека (здесь раскрыто только 1.), просто спросите.
Любое предложение приветствуется.