2010-08-05 3 views
0

Я хочу проверить, удален ли объект после вызова моей функции executeDelete, чтобы отправить пользователю ошибку, если объект все еще находится в моей базе данных.symfony 1.4: problem method isDeleted()

if ($logement->isDeleted()) { 
    $this->getUser()->setFlash('notice', 'Suppression du logement effectuée'); 
} 
else { 
    $this->getUser()->setFlash('error', 'Erreur lors de la suppression du logement'); 
} 

Но у меня есть ошибка:

Unknown method Logement::isDeleted 

Я не найти, как использовать этот метод, и я думаю, что это проблема у меня есть.

ответ

1

Возможно, вам придется показать нам больше кода ... Но в основном ваш метод не существует, и вам нужно будет его создать.

Предполагаю, что вы используете Доктрину. Предполагая, что вы удаляете запись, как так:

$lodgement->delete(); 

ли не метод удаления возвращает логическое значение, чтобы указать успех/провал? Таким образом, вы можете просто сделать следующее:

if ($lodgement->delete()) { 
    $this->getUser()->setFlash('notice', 'success'); 
} else { 
    $this->getUser()->setFlash('error', 'failure'); 
} 

EDIT

Если вы хотите реализовать метод isDeleted() можно использовать postDelete() крючок. В вашем классе модели:

class Lodgement extends BaseLodgement 
{ 
    // add an 'isDeleted' property 
    protected $isDeleted = false; 

    // override the postDelete method 
    public function postDelete($values) 
    { 
     $this->isDeleted = true; 
    } 

    // define your own isDeleted method 
    public function isDeleted() 
    { 
     return $this->isDeleted;  
    } 
} 

Тогда вы можете сделать это:

$lodgement->delete(); 
echo $lodgement->isDeleted() ? 'notice' : 'error'; 
+0

Хорошо, я показал на сайте о методах Propel как IsDeleted и IsModified, и я thounght это было то же самое Учение , Я также показал кое-что о IsDeleted на Jobeet: http://www.symfony-project.org/book/1_0/08-Inside-the-Model-Layer И я хочу знать, если есть способ знать, правильно ли работает обновление? – Elorfin

+0

Действительно .. есть метод isDeleted() в Propel! Чтобы проверить, изменилась ли запись, вы можете проверить состояние объекта с помощью метода state(). Он возвращает одну из констант, определенных как STATE_CLEAN, STATE_DIRTY и т. Д. http://www.doctrine-project.org/api/orm/1.2/doctrine/doctrine_record.html#STATE_CLEAN Что касается проверки обновления, сохраните () не возвращает значение, оно просто генерирует исключение при ошибке, но вы можете использовать trySave(), который возвращает логическое значение на основе результата ... Опять же, есть и postUpdate(), если вы хотите реализовать некоторые из вашей собственной логики :) –