ClassNotFoundException для FrameworkBundleAdminController в Prestashop 1.7.7.контроллер администратора модуля rc1

#php #symfony #prestashop

#php #symfony #prestashop

Вопрос:

Я провожу несколько тестов на prestashop 1.7.7.0.rc1 и пытаюсь создать контроллер администрирования с помощью Symfony в модуле.

Я сталкиваюсь с ClassNotFoundException с FrameworkBundleAdminController

 // ht_doctrine.php

declare(strict_types=1);

if (!defined('_PS_VERSION_')) {
    exit;
}
if (file_exists(__DIR__.'/vendor/autoload.php')) {
    require_once __DIR__.'/vendor/autoload.php';
}

class Ht_doctrine extends Module
{
    public function __construct()
    {
        $this->name = 'ht_doctrine';
        $this->author = 'Hugues';
        $this->version = '1.0.0';
        $this->ps_versions_compliancy = ['min' => '1.7.7', 'max' => _PS_VERSION_];
        $this->need_instance = 0;

        $this->bootstrap = true;

        parent::__construct();

        $this->displayName = $this->l('Exemple HW Doctrine');
        $this->description = $this->l('Demonstration des entités Doctrine');
    }

    public function install()
    {
        return parent::install()
            amp;amp; $this->registerHook('displayHome');
    }
    public function uninstall()
    {
        return parent::uninstall();
    }
    public function getContent()
    {
        Tools::redirectAdmin(
            $this->context->link->getAdminLink('AdminHtDoctrineQuote')
        );
    }
    public function hookDisplayHome()
    {
        $this->smarty->assign(['quotes' => []]);
        return $this->fetch('module:ht_doctrine/views/templates/hooks/quotes.tpl');
    }
}
 
 # config/routes.yml
htdoctrine_quote_index:
    path: /htdoctrine/quotes
    methods: [GET]
    defaults:
        _controller: 'PrestashopModuleHtDoctrineControllerAdminQuotesController::indexAction'
        _legacy_controller: 'AdminHtDoctrineQuote'
        _legacy_link: 'AdminHtDoctrineQuote'
 
 // src/Controller/Admin/QuotesController.php
<?php
namespace PrestashopModuleHtDoctrineControllerAdmin;

use PrestashopBundleControllerAdminFrameworkBundleAdminController;
use SymfonyComponentHttpFoundationResponse;

class QuotesController extends FrameworkBundleAdminController
{
    public function indexAction(): Response
    {
        return $this->render('@Modules/ht_doctrine/views/templates/admin/index.html.twig');
    }
}
 

composer.json :

 {
  "name": "lhapaipai/htdoctrine",
  "autoload": {
    "psr-4": {
      "Prestashop\Module\HtDoctrine\": "src/"
    }
  },
  "config": {
    "prepend-autoloader": false,
  },
  "type": "prestashop-module"
}

 

прежде чем я захочу использовать этот модуль, я напишу :

 rm -rf var/cache/dev
cd modules/ht_doctrine
composer dump-autoload
 

Я пытаюсь перейти на свою страницу конф, и все в порядке! НО если я обновлю страницу, у меня появится сообщение об ошибке от Symfony.

 Attempted to load class "FrameworkBundleAdminController" from namespace "PrestashopBundleControllerAdmin".
Did you forget a "use" statement for "PrestaShopBundleControllerAdminFrameworkBundleAdminController"?
 

Исключение ClassNotFoundException
в modules/ht_doctrine/src/Controller/Admin/QuotesController.php (строка 7)

     namespace PrestashopModuleHtDoctrineControllerAdmin;
    use PrestashopBundleControllerAdminFrameworkBundleAdminController;
    use SymfonyComponentHttpFoundationResponse;
--> class QuotesController extends FrameworkBundleAdminController
    {
        public function indexAction(): Response
        {
            return $this->render('@Modules/ht_doctrine/views/templates/admin/index.html.twig');
        }
 

Если я очищу кеш, все будет в порядке, но для одной попытки .. после того, как я снова столкнусь с этой ошибкой.
вы хоть представляете, что я пропустил?
Я не выполнял никаких composer действий в корне проекта.
Я не очень хорошо понимаю, как composer.json-файл модуля и основной composer.json-файл взаимодействуют друг с другом.

Спасибо за ваши идеи!

Ответ №1:

Проблема возникла из-за забытой заглавной буквы в моем пространстве имен (Presta S hop)…

use PrestaShopBundleControllerAdminFrameworkBundleAdminController;

вместо плохого : use PrestashopBundleControllerAdminFrameworkBundleAdminController;