註解非常好,我們將它們用於代碼生成,以便我們可以根據Doctrine EntityManger返回的模式屬性定義表單元素行爲。我希望註釋能夠將更多的實體定義放在一個地方,並使它們更容易管理,到目前爲止這是事實。
這就是說,我發現註釋有點不靈活,因爲由註釋分配的屬性不能被子類中的其他註釋覆蓋。
在運行時很容易覆蓋使用註釋設置的屬性,但不能用更多的註釋來完成。 (可能是明顯的。)
所以我在做我的控制器操作覆蓋此刻。
例子:
$builder = new AnnotationBuilder();
$form = $builder->createForm($myEntity);
// customize the the InputFilter for myElement
$form->getInputFilter()->get('myElement')->setAllowEmpty(FALSE);
$form->getInputFilter()->get('myElement')->setRequired(TRUE);
$form->getInputFilter()->get('myElement')->getValidatorChain()->addValidator(new \Zend\Validator\NotEmpty('all'));
// carry on with the form as normal
$form->setData($this->getRequest()->getQuery());
正如我纔剛剛開始需要應用自定義的驗證規則,並預期這些措施隨着時間的推移更加複雜,甚至有條件的,我想我會想移動我的表單生成器從控制器和模型中移出。原因是,當/如果我開始定義有條件的驗證規則時,該邏輯位於它所屬的模型中。這將清理Controller操作,因爲所有表單程序集都變成了黑盒子方法。
例子:
$form = $myEntityModel->buildForm($myEntity);
// carry on with the form as normal
$form->setData($this->getRequest()->getQuery());
所以我不認爲它很重要,你是否使用註釋來定義您的默認輸入的規則。無論您最初如何定義它們,您都將根據業務邏輯修改這些內容。
這聽起來像你可能會受益於將表單程序集移動到您的模型類中,以實現將驗證規則與實體完全分離的目標。我相信你的直覺是正確的,商業邏輯需要留在模型中,而不是在控制器或實體中。