2016-08-15 2 views
2

У меня есть расширение, которое расширяет метод родителей.SilverStripe Проверьте, редактируется или добавляется запись?

<?php 
public function onAfterWrite(){ 
    parent::onAfterWrite(); 

    $newTask = new Mytask($this->owner->ID); 
    $newTask->copyTask(); 
} 
?> 

Проблема:

Я хочу, чтобы создать экземпляр класса MyTask и вызвать его метод только тогда, когда новая запись добавляется, либо не тогда, когда существующая запись редактируются. Как проверить, мы только что отредактировали существующую запись или добавили новую запись в метод onAfterWrite?

Благодаря

ответ

6

Я считаю, что на начальной записи не будет никаких ID набора против объекта (по крайней мере, не во время onBeforeWrite).

Вы можете использовать это в своих интересах, установив флаг на объекте (например: $this->isFirstWrite = true) во время onBeforeWrite, а затем проверив его onAfterWrite.

ОБНОВЛЕНИЕ: Как справедливо сказал Барри, есть функция, называемая isInDB, которую вы можете использовать, которая просто проверяет, есть ли идентификатор, который может защитить вас в будущем, если мы больше не будем явно полагаться на идентификатор в качестве индикатора о том, находится ли он в БД.

5

Я бы предложил $this->IsInDB() он возвращает «Истина, если объект находится в базе данных». Ссылка на api. Это проверяет наличие идентификатора, но делает это в хорошей хорошо названной функции, чтобы дать понять, что происходит.

+0

Очень верно - я обновил сообщение –