1

symfony 2.3 アプリケーションでは、タイムスタンプ可能でスラッグ可能な機能のために gedmo を使用しようとしています。

Thoisは私がそれをインストールした方法です:

composer.json :

"gedmo/doctrine-extensions": "dev-master",

アップデート :

php composer.phar update

doctrine_extensions.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 ] ]

config.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

さらにコードが必要な場合は、教えてください。

これについて私を助けてくれるとうれしいです...

編集 :

スラッガブルの場合-あなたは正しいです-私のコピー-貼り付けエラー。これで動作します。

しかし、更新しようとすると、まだこの「今年は無効です」というエラーが表示されます。実際、更新は完了していますが、タイムスタンプ可能なフィールドはデータベースで 0000-00-00 00:00:00 に設定されています。また、コントローラーが更新されたデータで編集ページを再度レンダリングしようとすると、無効な日付が原因でエラーが発生します。

ここで、おそらくタイムスタンプ可能なフィールドの隠された値を導入する必要があると思いました?! これには私にとっての論理がなくても。しかし、とにかく機能しません。データは更新されておらず、表示されるフラッシュ通知では、「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) }}
...
4

0 に答える 0