Правильные формы событий для отображения измененных данных и обновления измененных данных? - PullRequest
0 голосов
/ 13 марта 2012

Простая задача: перед отображением формы, если $data->getRole() начинается с "ROLE_", удалите эту строку и отобразите только остальные. Когда пользователь отправит форму, сделайте наоборот: добавьте "ROLE_" перед именем.

Какое лучшее место для этого? На самом деле я использую PRE_SET_DATA и POST_BIND. Это правильные события для выполнения этой операции?

    $builder->addEventListener(FormEvents::PRE_SET_DATA,
        function(DataEvent $event){

        if(is_null($data = $event->getData()) || !$data->getId()) return;

        $data->setRole(strtoupper(preg_replace('/^ROLE_/i', '',
            $data->getRole())));

    });

    $builder->addEventListener(FormEvents::POST_BIND,
        function(DataEvent $event) {

        if(is_null($data = $event->getData()) || !$data->getId()) return;

        $data->setRole('ROLE_' . strtoupper($data->getRole()));

    });

1 Ответ

1 голос
/ 13 марта 2012

Ну, чтение роли без префикса «РОЛЬ» - это не то, что я бы делал, используя события. Поскольку они запутывают ваш рабочий процесс, события должны использоваться с осторожностью! Работая с Symfony некоторое время, я использовал их один или два раза, когда другого пути действительно не было. В остальное время был лучший способ.

Я бы хотел добавить функцию getShortRole и setShortRole и использовать shortRole в вашей сущности:

class MyEntity {
    private $role;

    public function setShortRole($role) {
        $this->role = 'ROLE_' . strtoupper($role);
    }

    public function getShortRole() {
        return strtoupper(preg_replace('/^ROLE_/i', '', $this->role));
    }
}

Вы избавляете себя от множества проблем, работая с моделями вместо событий!

Второй, более сложный способ - использовать модель, которая представляет форму вместо сущности и отображает форму на сущность. Вот хорошая статья об этом здесь ! Я использую это сам, и это работает хорошо.

...