Search code examples
symfonydependency-injectionsonata-adminsymfony-sonatasymfony-3.4

Sonata with Symfony3.4 - Dependency injection (Correct Sonata admin service declaration)


I'm trying to install Sonata (sonata-project/admin-bundle) on my symphony 3.4 project.

Unfortunatemly, I've an error when I add my first service.

services.yaml :

    admin.carrier:
    class: App\Admin\CarrierAdmin
    arguments: [~, App\Entity\Carrier, ~]
    tags:
        - { name: sonata.admin, manager_type: orm, label: Carrier }
    public: true

And the error I get when accessing to http://localhost/admin/dashboard :

1) FatalThrowableError

Type error: strlen() expects parameter 1 to be string, null given
in AddDependencyCallsCompilerPass.php (line 401)
at strlen(null)in AddDependencyCallsCompilerPass.php (line 401)
at AddDependencyCallsCompilerPass->replaceDefaultArguments(array('admin.carrier', 'SonataAdminBundle:CRUD'), object(Definition), null)in AddDependencyCallsCompilerPass.php (line 67)
at AddDependencyCallsCompilerPass->process(object(ContainerBuilder))in Compiler.php (line 141)
at Compiler->compile(object(ContainerBuilder))in ContainerBuilder.php (line 753)
at ContainerBuilder->compile()in Kernel.php (line 634)
at Kernel->initializeContainer()in Kernel.php (line 137)
at Kernel->boot()in Kernel.php (line 197)
at Kernel->handle(object(Request))in index.php (line 25)

Does anyone can help me ?


Solution

  • First of all it's goo idea to add app prefix to your admin service. But your mistake in declaration of CRUD controller. Third argument - is a CRUD controller for this admin service. Thus, you should use default one: SonataAdminBundle:CRUD

    app.admin.carrier:
        class: App\Admin\CarrierAdmin
        arguments: [~, App\Entity\Carrier, SonataAdminBundle:CRUD]
        tags:
            - { name: sonata.admin, manager_type: orm, group: 'carrier', label_catalogue: "admin", label: 'carrier' }