#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;