Замена сгенерированного метода удаления в бэкэнде на Symfony - PullRequest
0 голосов
/ 30 июня 2011

В моем бэкэнд-приложении в Symfony есть несколько моделей. Поскольку эти модели связаны между собой через внешние ключи, я хотел бы заменить метод удаления по умолчанию на один из моих собственных, чтобы проверить, можно ли удалить объект.

Для этого я разработал промежуточный класс MyActions, который наследуется от sfActions, и установил actions_base_class с MyActions в generator.yml.

В MyActions классе я поместил метод executeDeleteIfNotUsed, который я хочу выполнить вместо executeDelete.

Когда дело доходит до настройки действий модуля, я сделал что-то подобное в generator.yml:

list:
    title: Authorities
    display: [name, updated_at]
    fields:
      name:
        label: Name
      updated_at:
        label: Last update
        date_format: f
    sort: ~
    object_actions:
      _edit:    ~
      _delete: { label: Delete, action: delete_if_not_used }

Но Symfony по-прежнему генерирует маршруты к executeDelete вместо того, который я определил.

Что я делаю не так? Какой лучший способ реализовать это? Нужно ли добавлять собственные маршруты помимо sfDoctrineRouteCollection?

Спасибо !!

Ответы [ 2 ]

3 голосов
/ 30 июня 2011

Мне кажется, ты делаешь все более сложным, чем нужно. Я бы просто придерживался обычного класса действий и переопределил метод delete своим собственным. Таким образом, вы знаете, что ваш код используется, и вам не нужно возиться с generator.yml

Редактировать

Исходя из вашего комментария, я понимаю, почему вы хотите сделать это так, как описано в вашем вопросе. Изменение действия для _delete в generator.yml не будет работать. Я не совсем уверен, почему , но я вполне уверен, что это как-то связано с тем фактом, что это запрос Javascript. Вместо этого добавьте новое настраиваемое действие.

list:
  object_actions:
    _edit: ~ # This ensures your edit action remains unchanged
    delete_if_not_used: { label: Delete, action: action: delete_if_not_used }

Обратите внимание, что фактический метод действия и имя действия в generator.yml должны совпадать. В своем исходном вопросе вы использовали метод executeDeleteIfNotUsed и имели delete_if_not_used в generator.yml. Это не сработает, потому что, насколько известно Symfony, это два совершенно разных метода. Я бы предложил использовать deleteifnotused в generator.yml

1 голос
/ 01 июля 2011

Я думаю, что вы делаете это неправильно. Вы просто поместили свою логику удаления в метод delete () Model . Это лучшая практика и рекомендуемый способ.

Вам даже нечего изменить в сгенерированном действии администратора, потому что оно использует метод delete () вашего объекта:

if ($this->getRoute()->getObject()->delete())
{
  $this->getUser()->setFlash('notice', 'The item was deleted successfully.');
}

Кроме того, использование этой логики в модели позволит вам более согласованно удалять сущности.

...