我想將一些標籤賦予我的教義模型的一些對象。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