我对Symfony并不陌生,我在从2.0到2.3的多个项目中工作,并且我成功地使用了几次生命周期回调。
现在我安装最新的Symfony 2.3.6,如下所示:
php composer.phar create-project symfony/framework-standard-edition path/ 2.3.6
我总是在任何地方使用注释。
我在我的实体顶部添加了很好的注释,如下所示:
<?php
namespace Myproject'AdminBundle'Entity;
use Doctrine'ORM'Mapping as ORM;
/**
* Category
*
* @ORM'Table(name="category")
* @ORM'HasLifecycleCallbacks()
* @ORM'Entity
*/
class Category
{
和预持久注释:
/**
* @ORM'PrePersist
*/
public function addTitleSuffix()
{
$this->title = $this->title . '--test';
}
我做了几个书面测试
@ORM'HasLifecycleCallbacks
或与
@ORM'PrePersist()
或在PrePersist
中添加退出,而不是工作:(
实体好坚持到我的 mysql 数据库,但不在我的prepersist
方法中输入。
我的控制器是用原油生成的。
我的插入方法是:
/**
* Creates a new Category entity.
*
* @Route("/", name="category_create")
* @Method("POST")
* @Template()
*/
public function createAction(Request $request)
{
$entity = new Category();
$form = $this->createCreateForm($entity);
$form->handleRequest($request);
if ($form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->persist($entity);
$em->flush();
return $this->redirect($this->generateUrl('category_show', array('id' => $entity->getId())));
}
return array(
'entity' => $entity,
'form' => $form->createView(),
);
}
来自我的作曲家.json
"require": {
"php": ">=5.3.3",
"symfony/symfony": "2.3.*",
"doctrine/orm": ">=2.2.3,<2.4-dev",
"doctrine/doctrine-bundle": "1.2.*",
"twig/extensions": "1.0.*",
"symfony/assetic-bundle": "2.3.*",
"symfony/swiftmailer-bundle": "2.3.*",
"symfony/monolog-bundle": "2.3.*",
"sensio/distribution-bundle": "2.3.*",
"sensio/framework-extra-bundle": "2.3.*",
"sensio/generator-bundle": "2.3.*",
"incenteev/composer-parameter-handler": "~2.0",
"friendsofsymfony/jsrouting-bundle": "~1.1",
"knplabs/knp-paginator-bundle": "dev-master"
}
我今天更新了。
问题出在哪里?
当我自动生成我的实体时,例如:
php app/console doctrine:mapping:import --force AcmeBlogBundle yml
它是生成 YML 的,并且 YML 优先于实体上的注释。
当我删除yml时一切正常
如果你使用YMAL(元日期),你不需要写注释
@ORM'HasLifecycleCallbacks()
在实体类的顶部 并编写注释
@ORM'PrePersist
在您需要执行预持久化的方法之上
只需在 YMAL 文件中写下您的方法名称,就像这样:
lifecycleCallbacks:
prePersist: [addTitleSuffix]
就像在Symfony 2的文档中一样