Все мои настройки Doctrine2 выполняются в файлах YAML.У меня есть класс сущности с именем LoanAppMenuProgress, где я пытаюсь выполнить функцию prePersist.Эта сущность LoanAppMenuProgress имеет отношение oneToOne с другим классом с именем LoanApp.Существует связь внешнего ключа в таблице LoanAppMenuProgress, связанной с таблицей LoanApp в БД.
У меня есть этот конфиг для моего класса LoanAppMenuProgress в LoanApp.LoanAppMenuProgress.orm.yml:
LoanEv\LoanAppBundle\Entity\LoanApp\LoanAppMenuProgress:
type: entity
repositoryClass: LoanEv\LoanAppBundle\Repository\LoanApp\LoanAppMenuProgress
table: loan_app_menu_progress
id:
id:
type: integer
generator: { strategy: auto }
### This is the OWNING side of the relationship
oneToOne:
loan_app:
targetEntity: LoanApp
inversedBy: loanapp_menu
joinColumn:
name: loan_id
referencedColumnName: id
fields:
loan_id:
type: integer
menu_id2:
type: integer
menu_id3:
type: integer
menu_id4:
type: integer
lifecycleCallbacks:
prePersist: [ updateMainMenuStatus ]
Это мой файл LoanApp.LoanApp.orm.yml:
LoanEv\LoanAppBundle\Entity\LoanApp\LoanApp:
type: entity
repositoryClass: LoanEv\LoanAppBundle\Repository\LoanApp\LoanAppRepository
table: loan_app
id:
id:
type: integer
generator: { strategy: auto }
## This is the INVERSE side of the relationship.
oneToOne:
loanapp_menu:
targetEntity: LoanAppMenuProgress
mappedBy: loan_app
fields:
bank_id:
type: integer
# etc.
В моем классе Entity LoanAppMenuProgress у меня есть следующий код:
namespace LoanEv\LoanAppBundle\Entity\LoanApp;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Util\Debug;
/**
* LoanEv\LoanAppBundle\Entity\LoanApp\LoanAppMenuProgress
*/
class LoanAppMenuProgress
{
private $id;
private $loan_id;
/**
* @var LoanEv\LoanAppBundle\Entity\LoanApp\LoanApp
*/
private $loan_app;
private $menu_id2 = 0;
private $menu_id3 = 0;
private $menu_id4 = 0;
// ...
public function updateMainMenuStatus()
{
echo("Inside prePersist's updateMainMenuStatus function. ");
}
}
Следующий код вызывается из моего класса LoanAppController:
// ...
//Save the menuStatus changes.
echo("About to persist. ");
$em->persist($menuStatus[0]);
echo("Done persisting.");
$em->flush();
// ...
Когда я выполняю код вLoanAppController: на моем экране записывается следующее:
"Готов к сохранению. Готов к сохранению."
Мне не хватает этого бита в середине, где вывод должен читаться:
"Готов к сохранению. Внутри функции prePersist updateMainMenuStatus. Завершено сохранение."
Изменения записываются в базу данных, и все функциональные возможности системы работают, как и ожидалось, за исключением prePersist (),Я долго боролся с настройками yml, поэтому я исходил из того, что мои настройки YAML неверны.
В документации (насколько я понимаю) упоминается, что я должен добавить lifecycleCallbacks: иprePersist: элементы в файл yml, а затем убедитесь, что у меня есть открытая функция в существующем объекте.Очевидно, я что-то упускаю.
У кого-нибудь есть идеи?
Спасибо.