Правильный способ предотвратить удаление записи Doctrine - PullRequest
2 голосов
/ 22 ноября 2010

Могу ли я просто переопределить delete() метод Doctrine_Record?

class myRec extends myRecBase
  public function delete() {
    return false;
  }
}

Или использовать preDelete крючок? Или выбросить исключение в delete()?

Любая помощь будет оценена.

Ответы [ 2 ]

4 голосов
/ 22 ноября 2010

Один из вариантов - использовать метод preDelete, чтобы просто пропустить метод delete все вместе.

Пример:

public function preDelete(Doctrine_Event $event)
{
   $event->skipOperation();
}

Вы должны быть в состоянии сделать это в своих расширенных классах Doctrine_Record илиВ качестве альтернативы со слушателем.Слушатель может быть полезен в тех случаях, когда вы хотите, чтобы какая-то часть вашего приложения имела возможность удалять записи (например, раздел администратора или код на стороне клиента).

При использовании метода прослушивания вы создаете прослушиватель с помощью вышеуказанного метода preDelete и регистрируете его в своей таблице следующим образом:

$userTable = Doctrine_Core::getTable('User');
$userTable->addRecordListener(new HydrationListener());

Если прослушиватель не зарегистрирован, вы все равно сможете удалитьзаписей.Если прослушиватель зарегистрирован, ваши удаления не будут сохранены в базе данных.

Более подробную информацию об этом методе можно найти здесь: http://www.doctrine -project.org / projects / orm / 1.2 / docs / manual/ EVENT-слушателей / ан

0 голосов
/ 22 ноября 2010

ИМХО, я бы, наверное, тоже так сделал, так как ловушка preDelete все еще будет выполнять метод delete впоследствии.

...