Есть ли способ связать новое действие в контроллере CRUD, созданном с помощью EasyAdmin 4.x , с действием в другом контроллере CRUD, с которым у него есть отношение OneToMany?
class FirstEntityCrudController extends AbstractCrudController
{
...
public function configureActions(Actions $actions): Actions
{
return $actions
->add(Crud::PAGE_INDEX, Action::new('add-second-entity','Add a second entity')
->linkToCrudAction(Action::NEW ???)
)
;
}
}
документы говорят, что я могу использовать:
linkToCrudAction(): to execute some method of the current CRUD controller;
Но, похоже, нет указаний на то, как «выполнить какой-либо метод CRUD-контроллера отличающийся».
Примечание: Есть хитрый способ обойти это, но он не кажется здоровым:
->linkToUrl('the url to the desired action')
С использованием:
Спасибо, что указали мне правильное направление, я отвечу.




После комментария @Eugne и, как упоминается документы, мы можем сгенерировать URL-адрес для желаемого действия, используя класс AdminUrlGenerator следующим образом:
class FirstEntityCrudController extends AbstractCrudController
{
private $adminUrlGenerator;
public function __construct(AdminUrlGenerator $adminUrlGenerator)
{
$this->adminUrlGenerator = $adminUrlGenerator;
}
...
public function configureActions(Actions $actions): Actions
{
//The magic happens here
$url = $this->adminUrlGenerator
->setController(SecondEntityCrudController::class)
->setAction(Action::NEW)
->generateUrl();
return $actions
...
->add(Crud::PAGE_INDEX, Action::new('add-second-entity', 'Add second entity')
->linkToUrl($url)
);
}
}
Это сработало для меня.
Я думаю, вы можете попробовать использовать УрлГенератор с
linkToUrl()