我想将一些标签赋予我的教义模型的一些对象。Symfony插件sfDoctrineActAsTaggablePlugin不能正常工作
我发现sfDoctrineActAsTaggablePlugin这似乎正是我所需要的。
的问题是,当我要救一个加标签的对象,我得到这个错误:
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的DBMS尝试,具有相同的结果。
您的帮助将不胜感激。
感谢
FuzzyTern
EDIT1 - 关于什么说johnwards:任何人都可以确认的是,加标签的行为是在schema.yml中的文件通过添加 “ACTAS:”,而不是 “模板” ?这就是我在这里和那里阅读的内容(请参阅我对johnwards的文章的评论),但既然这两种解决方案都不适合我,我不确定。当使用“模板”关键字时,我得到:
Unknown method Mishidea::addTag
并且不生成模型的特定类。
编辑2 - 经过进一步调查,我发现Symfony堆栈跟踪是interresting。 事实上,当我这样做:
$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次在这里展开),只问。 欢迎任何建议。
谢谢johnward,但你确定吗? 确实是在官方文档上写的(见我的第一篇文章中的链接),但有些消息来源说文档是错误的,我们应该使用“actAs”,而不是“模板”。 (http://n8v.enteuxis.org/2010/05/adding-wordpress-like-tags-to-a-symfony-1-4-admin-generator-form/,http://www.mail-archive。 COM/symfony的用户@ Google网上论坛。COM/msg26173.html) 如果我按照你的建议,原则:建立 - 所有工作正常(像以前一样),但是当我使用加标签的功能之一,我得到: 未知方法Mishidea :: addTag 任何想法? – 2010-06-29 09:45:32
我只是基于文档的答案。你是否搜索过你的save_tags代码来查看调用的地方? – johnwards 2010-06-29 11:47:10
saved_tags只出现在插件的一部分TaggableTemplate.class.php中。我刚刚编辑我原来的帖子,以添加我得到的堆栈跟踪的一部分。它证明了这种关系是有效的,但最终我不明白什么是错的。如果这个堆栈跟踪启发你,请随时分享你的灵感:-) – 2010-06-29 14:30:53