Link 到不同 CRUD 控制器的某些操作

Link to some action of a different CRUD controller

对于 link 在使用 EasyAdmin 4.x 制作的 CRUD 控制器中的新操作,对于另一个具有 OneToMany 关系的 CRUD 控制器中的操作,是否有任何解决方法?

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 ???)

            )
        ;
    }
}

The docs说我可以用:

linkToCrudAction(): to execute some method of the current CRUD controller;

但似乎没有关于如何“执行不同 CRUD 控制器的某些方法”的说明。

注意: 有一个偷偷摸摸的方法,但它似乎不健康:

   ->linkToUrl('the url to the desired action')
                

使用:

根据 @Ruban 的评论,正如 the docs 提到的那样,我们可以使用 [=11= 为所需的操作生成 URL ] class如下:

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)
            );
    }
}

这对我有用。