PHP Exception ReflectionException: "Method importAction does not exist" on Sonata 3.4 admin
Closed this issue · 6 comments
Q | A |
---|---|
Version | 0.1.2 |
Support Question
Hello there, @kunicmarko20.
I have installed version 0.1.2 successfully on my application and now the button shows up on my admin page.
But when I click in this button, i receive a
Uncaught PHP Exception ReflectionException: "Method importAction does not exist" at /vendor/sensio/framework-extra-bundle/EventListener/ControllerListener.php line 58 {"exception":"[object] (ReflectionException(code: 0): Method importAction does not exist at /vendor/sensio/framework-extra-bundle/EventListener/ControllerListener.php:58)"} []
My admin class looks like:
use Sonata\AdminBundle\Admin\AbstractAdmin;
...
use KunicMarko\SonataImporterBundle\Admin\AdminWithImport;
class ListingAdmin extends AbstractAdmin implements AdminWithImport
{
...
}
I have no AdminController defined, so I have used the https://github.com/kunicmarko20/SonataImporterBundle/tree/0.1.2#prepare-controller config
I have already created a ListingCSVImportConfiguration class src/Cocorico/CoreBundle/Importer/ListingCSVImportConfiguration.php
but couldn't link it with my Admin class and didn't find a way to do it.
The ListingCSVImportConfiguration content is:
use Cocorico\CoreBundle\Admin\ListingAdmin;
use Cocorico\CoreBundle\Model\Manager\ListingManager;
use Cocorico\CoreBundle\Entity\Listing;
use KunicMarko\SonataImporterBundle\SonataImportConfiguration;
class ListingCSVImportConfiguration implements SonataImportConfiguration
{
protected $lem;
public function __construct(ListingManager $lem)
{
$this->lem = $lem;
}
public static function adminClass(): string
{
return ListingAdmin::class;
}
public static function format(): string
{
return 'csv';
}
public function map(array $item, array $additionalData)
{
$listing = new Listing();
$listing->setName($item[0]);
$this->lem->save($listing);
}
public function save(array $items, array $additionalData): void
{
$this->lem->save();
}
}
How does your service definition for ListingAdmin
look like?
Hello there!
This is my service definition of the Listing Admin
sonata.admin.listing:
class: Cocorico\CoreBundle\Admin\ListingAdmin
tags:
- { name: sonata.admin, manager_type: orm, group: "Listings", label: "Listings" }
arguments:
- ~
- Cocorico\CoreBundle\Entity\Listing
- ~
calls:
- [ setTranslationDomain, [SonataAdminBundle]]
- [ setLocales, ["%cocorico.locales%"]]
- [ setIncludeVat, ["%cocorico.include_vat%"]]
- [ setBundlesEnabled, ["%kernel.bundles%"]]
and the class implementation:
class ListingAdmin extends AbstractAdmin implements AdminWithImport
Hey @SchulzWill,
Didn't use this in a while so I had to read code, basically, your services need to have autoconfigure: true
for:
this to kick in. You can read more about it here.
This attaches a tag based on interface your classes implement but only if autoconfiguration is on.
If you don't have or want to use autoconfigure: true
, an alternate is to tag those services manually. (eg to your admin service definition add sonata.importer.admin
tag and to configuration sonata.importer.configuration
) You can read more about service tags here.
hey @SchulzWill, do you still need any help or this can be closed?
Hello there, @kunicmarko20.
Sorry for the delay in my response... Well, with autoconfigure applied like this:
sonata.admin.listing:
autoconfigure: true
autowire: true
class: Cocorico\CoreBundle\Admin\ListingAdmin
tags:
- { name: sonata.admin, manager_type: orm, group: "Listings", label: "Listings" }
arguments:
- ~
- Cocorico\CoreBundle\Entity\Listing
- ~
calls:
- [ setTranslationDomain, [SonataAdminBundle]]
- [ setLocales, ["%cocorico.locales%"]]
- [ setIncludeVat, ["%cocorico.include_vat%"]]
- [ setBundlesEnabled, ["%kernel.bundles%"]]
The following error appears:
request.CRITICAL: Uncaught PHP Exception Symfony\Component\Debug\Exception\FatalThrowableError: "Call to a member function get() on null" at /sonata-project/admin-bundle/src/Controller/CRUDController.php line 1044 {"exception":"[object] (Symfony\\Component\\Debug\\Exception\\FatalThrowableError(code: 0): Call to a member function get() on null at //sonata-project/admin-bundle/src/Controller/CRUDController.php:1044)"} []
This line point to:
/**
* @return Request
*/
public function getRequest()
{
return $this->container->get('request_stack')->getCurrentRequest();
}
This is weird, now the crud controller doesn't have a container instance. If I find some free time, I will try to look into it, but I can't promise anything.