Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 自定义操作页Sonata管理员_Php_Symfony_Sonata Admin - Fatal编程技术网

Php 自定义操作页Sonata管理员

Php 自定义操作页Sonata管理员,php,symfony,sonata-admin,Php,Symfony,Sonata Admin,我想为我的sonata管理项目创建一个新的操作页面。我想创建一个上传文件的页面,但我希望此页面与创建页面不同。我试图更改configureRoutes函数,并添加了“/upload/path”,就像在Sonata教程中一样,但他们告诉我使用getRouterIdParameter(),我不想要类似/app/class//upload的东西。我只想做一些类似于/app/class/upload的事情 有可能吗 CRUD-创建、读取、更新、删除。因此,CRUD控制器使用已定义的对象。当您在CRUD控

我想为我的sonata管理项目创建一个新的操作页面。我想创建一个上传文件的页面,但我希望此页面与创建页面不同。我试图更改
configureRoutes
函数,并添加了“/upload/path”,就像在Sonata教程中一样,但他们告诉我使用
getRouterIdParameter()
,我不想要类似
/app/class//upload
的东西。我只想做一些类似于
/app/class/upload
的事情

有可能吗

  • CRUD-创建、读取、更新、删除。因此,CRUD控制器使用已定义的对象。当您在CRUD控制器中创建操作时,您必须获取对象,否则-您的操作将不知道要创建、更新、删除哪个对象等
  • 这就是为什么您应该将对象的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()

    希望对你有帮助

  • CRUD-创建、读取、更新、删除。因此,CRUD控制器使用已定义的对象。当您在CRUD控制器中创建操作时,您必须获取对象,否则-您的操作将不知道要创建、更新、删除哪个对象等
  • 这就是为什么您应该将对象的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()


    希望对你有帮助

    您如何定义此路由的凝乳控制器操作?@MKhalidJunaid,是的,我定义了。您如何定义此路由的凝乳控制器操作?@MKhalidJunaid,是的,我定义了。我不知道只能设置
    $collection->add('upload','upload')。这就是答案。非常感谢。我不知道只能设置
    $collection->add('upload','upload')。这就是答案。非常感谢。