EasyAdminBundle:如何重定向回表单
EasyAdminBundle: how to redirect back to form
在使用 EasyAdminBundle 创建的管理面板中,管理员可以创建一个新的预订。我想在这个新的预订实例保存到数据库之前添加一个可用性检查(通过服务)。如果此检查 returns 为假,则应将管理员重定向回表单。
我扩展了 EasyCorp\Bundle\EasyAdminBundle\Controller\AdminController
class 并覆盖了 persistEntity()
函数:
...
use EasyCorp\Bundle\EasyAdminBundle\Controller\AdminController as BaseAdminController;
class BookingController extends BaseAdminController
{
private $availabilityService;
public function __construct(AvailabilityService $availabilityService)
{
$this->availabilityService = $availabilityService;
}
protected function persistEntity($booking)
{
$checkin = Carbon::instance($booking->getCheckin());
$checkout = Carbon::instance($booking->getCheckout());
if($this->availabilityService->checkAvailability($checkin, $checkout)) {
parent::persistEntity($booking);
} else {
return false; //redirect back to the form
}
}
}
我认为你应该改写 newAction 并编辑
if ($newForm->isSubmitted() && $newForm->isValid()) {
像这样
if ($newForm->isSubmitted() && $newForm->isValid()) {
if ($this->availabilityService->checkAvailability($entity)) {
如果这不符合您的需要,您可以为 EasyAdminEvents::PRE_PERSIST 和 return 编写一个重定向到 newAction 的 EventListener。 EventListener 会更复杂,因为事件会在新实体和编辑过的实体上分派。
我找到了解决方案(Vyctorya 引导我走上了正确的道路)。确保您仅使用 instanceof
对相关实体调用检查。如果检查失败,通过传入引用请求 header.
将用户重定向到编辑表单
if ($newForm->isSubmitted() && $newForm->isValid()) {
if ($entity instanceof Booking) {
$formData = $newForm->getData();
if(!$this->availabilityService->checkAvailability($formData->getCheckin(), $formData->getCheckout())) {
return $this->redirect($this->request->headers->get('referer'));
}
}
return $this->redirectToReferrer();
}
在使用 EasyAdminBundle 创建的管理面板中,管理员可以创建一个新的预订。我想在这个新的预订实例保存到数据库之前添加一个可用性检查(通过服务)。如果此检查 returns 为假,则应将管理员重定向回表单。
我扩展了 EasyCorp\Bundle\EasyAdminBundle\Controller\AdminController
class 并覆盖了 persistEntity()
函数:
...
use EasyCorp\Bundle\EasyAdminBundle\Controller\AdminController as BaseAdminController;
class BookingController extends BaseAdminController
{
private $availabilityService;
public function __construct(AvailabilityService $availabilityService)
{
$this->availabilityService = $availabilityService;
}
protected function persistEntity($booking)
{
$checkin = Carbon::instance($booking->getCheckin());
$checkout = Carbon::instance($booking->getCheckout());
if($this->availabilityService->checkAvailability($checkin, $checkout)) {
parent::persistEntity($booking);
} else {
return false; //redirect back to the form
}
}
}
我认为你应该改写 newAction 并编辑
if ($newForm->isSubmitted() && $newForm->isValid()) {
像这样
if ($newForm->isSubmitted() && $newForm->isValid()) {
if ($this->availabilityService->checkAvailability($entity)) {
如果这不符合您的需要,您可以为 EasyAdminEvents::PRE_PERSIST 和 return 编写一个重定向到 newAction 的 EventListener。 EventListener 会更复杂,因为事件会在新实体和编辑过的实体上分派。
我找到了解决方案(Vyctorya 引导我走上了正确的道路)。确保您仅使用 instanceof
对相关实体调用检查。如果检查失败,通过传入引用请求 header.
if ($newForm->isSubmitted() && $newForm->isValid()) {
if ($entity instanceof Booking) {
$formData = $newForm->getData();
if(!$this->availabilityService->checkAvailability($formData->getCheckin(), $formData->getCheckout())) {
return $this->redirect($this->request->headers->get('referer'));
}
}
return $this->redirectToReferrer();
}