自定义操作页面 Sonata Admin

Custom action page Sonata Admin

我想为我的奏鸣曲管理项目创建一个新的操作页面。我想制作一个上传文件的页面,但我希望这个页面不同于创建页面。我尝试更改 configureRoutes 功能并添加了 '/upload/ 路径,就像在 Sonata 教程中一样,但他们告诉我使用 getRouterIdParameter() 而我不想要 /app/class/<ID>/upload 之类的东西。我只想 /app/class/upload.

这可能吗?

  1. CRUD - 创建、读取、更新、删除。因此,CRUD 控制器使用已定义的对象。当您在 CRUD 控制器中创建操作时,您必须获取对象,否则 - 您的操作将不知道要创建、更新、删除哪个对象等。
  2. 这就是为什么您应该将对象的 ID 放入您的路线。

    public function superAction(Request $request, $id = null)
    {
        try {
            if ($id !== null) {
                $yourObject = $this->admin->getObject($id);
            }
        } catch (NotFoundHttpException $e) {
            error_log($e->getMessage());
        }
    
        //... your logic
    
    }
    

但是!如果您的操作不应该使用特定对象 - 您可以在路线中避免使用对象 $id。您也可以使用 GET 方法传递变量。随心所欲。

想象一下,您想要更新所有对象。然后你可以创建updateAllAction()然后添加这个路由:

/**
 * @param RouteCollection $collection
 */
protected function configureRoutes(RouteCollection $collection)
{
    $collection->add('updateAll', 'update/all');
}

只要您的操作不关心特定对象,您就可以避免在您的 uri 中使用 $this->getRouterIdParameter()

希望对您有所帮助。