在 symfony 2.3 应用程序中,我尝试使用 gedmo fo 时间戳和 sluggable 功能。
Thois 是我安装它的方式:
作曲家.json:
"gedmo/doctrine-extensions": "dev-master",
更新 :
php composer.phar update
学说扩展.yml:
services:
gedmo.listener.sluggable:
class: Gedmo\Sluggable\SluggableListener
tags:
- { name: doctrine.event_subscriber, connection: default }
calls:
- [ setAnnotationReader, [ @annotation_reader ] ]
gedmo.listener.timestampable:
class: Gedmo\Timestampable\TimestampableListener
tags:
- { name: doctrine.event_subscriber, connection: default }
calls:
- [ setAnnotationReader, [ @annotation_reader ] ]
配置.yml:
imports:
...
- { resource: doctrine_extensions.yml }
实体:
namespace Too\EmployeeBundle\Entity;
use Gedmo\Mapping\Annotation as Gedmo;
use Doctrine\ORM\Mapping as ORM;
/**
* Too\EmployeeBundle\Entity\Employee
*
* @ORM\Table(name="Employee")
* @ORM\Entity(repositoryClass="Too\EmployeeBundle\Entity\EmployeeRepository")
*/
class Employee
{
...
/**
* @var string $nomSlug
*
* @Gedmo\Slug(fields={"nomSlug"}, updatable=true, separator="_")
* @ORM\Column(name="nomSlug", type="string", length=100, nullable=true)
*/
private $nomSlug;
/**
* @var datetime $cree_le
*
* @Gedmo\Timestampable(on="create")
* @ORM\Column(type="datetime")
*/
private $cree_le;
/**
* @var datetime $modifie_le
*
* @Gedmo\Timestampable(on="update")
* @ORM\Column(type="datetime")
*/
private $modifie_le;
...
我以为这就是我所要做的,但现在的行为很奇怪:
创建时创建和修改日期已填写但未填写sluggable字段(nomSlug)
尝试更新时出现此错误:
This year is invalid
500 Internal Server Error - TransformationFailedException
如果您需要更多代码,请告诉我。
在这个问题上帮助我会很好...
编辑 :
对于 sluggable - 你是对的 - 我的复制 - 粘贴错误。这现在有效。
但是在尝试更新时,我仍然有这个“今年无效”错误。事实上更新已经完成,但是数据库中的时间戳字段设置为 0000-00-00 00:00:00。并且当控制器尝试使用更新的数据再次呈现编辑页面时,由于日期无效而出现错误。
现在我想也许我应该引入可时间戳字段的隐藏值?!即使这对我来说没有逻辑。但它无论如何都不起作用:数据不再更新,并且在我显示的 flash 通知中我只得到“flash.update.error” - 所以表格无效。
这是 edit.html.twig 的最后一个代码:
<form class="well" action="{{ path('employee_update', { 'id': entity.id }) }}" method="post" {{ form_enctype(edit_form) }}>
<input type="hidden" name="_method" value="PUT" />
<div>
{{ form_label(edit_form.nom) }}
{{ form_errors(edit_form.nom) }}
{{ form_widget(edit_form.nom) }}
</div>
<div>
{{ form_label(edit_form.email) }}
{{ form_errors(edit_form.email) }}
{{ form_widget(edit_form.email) }}
</div>
<div>
{{ form_label(edit_form.telephone) }}
{{ form_errors(edit_form.telephone) }}
{{ form_widget(edit_form.telephone) }}
</div>
<div>
{{ form_label(edit_form.actif) }}
{{ form_errors(edit_form.actif) }}
{{ form_widget(edit_form.actif) }}
</div>
<input type="hidden" id="too_employeebundle_employee_cree_le" name="too_employeebundle_employee[cree_le]" value="{{ entity.creele|date('Y-m-d H:i:s') }}">
<input type="hidden" id="too_employeebundle_employee_modifie_le" name="too_employeebundle_employee[modifie_le]" value="{{ entity.modifiele|date('Y-m-d H:i:s') }}">
{{ form_widget(edit_form._token) }}
...