找不到Prestashop存储库

问题描述 投票:0回答:1

早上好。

我在使用新的Symfony架构时遇到问题。我创建了一个现代化的控制器,其中路由工作完美。现在我想用ProductRepository搜索产品。

MyModule / src / Repository / ProductRepository

namespace PrestaShop\Module\MyModule\Repository;

use Doctrine\DBAL\Connection;

class ProductRepository
{
/**
 * @var Connection the Database connection.
 */
private $connection;

/**
 * @var string the Database prefix.
 */
private $databasePrefix;



/**
 * @param int $langId the lang id
 * @return array the list of products
 */
public function findAllbyLangId(int $langId)
{
    $prefix = $this->databasePrefix;
    $productTable = "${prefix}product";
    $productLangTable = "${prefix}product_lang";

    $query = "SELECT p.* FROM ${productTable} p LEFT JOIN ${productLangTable} pl ON (p.`id_product` = pl.`id_product`) WHERE pl.`id_lang` = :langId";
    $statement = $this->connection->prepare($query);
    $statement->bindValue('langId', $langId);
    $statement->execute();

    return $statement->fetchAll();
 }

}

MyModule / config / services.yml

services:
   product_repository:
   class: PrestaShop\Module\MyModule\Repository\ProductRepository
   arguments: ['@doctrine.dbal.default_connection', '%database_prefix%']

MyController

$products = $this->get('product_repository')->findAllByLangId(1);
dump($products);

现在我得到以下错误:“试图从名称空间“ PrestaShop \ Module \ MyModule \ Repository”中加载类“ ProductRepository”。您是否忘记了另一个名称空间的“使用”语句?“

我在那儿缺少什么?感谢您的时间和帮助。

更新-Stacktrace:

**ClassNotFoundException**
Symfony\Component\Debug\Exception\ClassNotFoundException:
Attempted to load class "ProductRepository" from namespace 
"PrestaShop\Module\EasyUpload\Repository".
 Did you forget a "use" statement for another namespace?

 at var\cache\dev\ContainerZiol6qc\getProductRepositoryService.php:8
 at require()
 (var\cache\dev\ContainerZiol6qc\appDevDebugProjectContainer.php:1713)
 at ContainerZiol6qc\appDevDebugProjectContainer->load('getProductRepositoryService.php')(vendor\symfony\symfony\src\Symfony\Component\DependencyInjection\Container.php:304)
at Symfony\Component\DependencyInjection\Container->get('product_repository')
 (vendor\symfony\symfony\src\Symfony\Bundle\FrameworkBundle\Controller\ControllerTrait.php:67)
at Symfony\Bundle\FrameworkBundle\Controller\Controller->get('product_repository')
 (modules\easyupload\src\Controller\DemoController.php:111)
at EasyUpload\Controller\DemoController->search()
 (modules\easyupload\src\Controller\DemoController.php:76)
at EasyUpload\Controller\DemoController->indexAction(object(Request), null)(vendor\symfony\symfony\src\Symfony\Component\HttpKernel\HttpKernel.php:151)
at Symfony\Component\HttpKernel\HttpKernel->handleRaw(object(Request), 1)

(vendor\symfony\symfony\src\Symfony\Component\HttpKernel\HttpKernel.php:68)
at Symfony\Component\HttpKernel\HttpKernel->handle(object(Request), 1, false)
  (vendor\symfony\symfony\src\Symfony\Component\HttpKernel\Kernel.php:200)
at Symfony\Component\HttpKernel\Kernel->handle(object(Request), 1, false)
 (admin108ptrz6g\index.php:86)`
php symfony prestashop prestashop-1.7
1个回答
0
投票

看来您没有使用预定义的名称空间创建composer.json文件。

这里是示例:

{
  "name": "YourName/YourModuleName",
  "description": "Awesome description",
  "autoload": {
    "psr-4": {
      "YourName\\YourModuleName\\": "/",
      "YourName\\YourModuleName\\Repository": "src/Repository/",
    }
  },
  "config": {
    "prepend-autoloader": false
  },
  "type": "prestashop-module"
}

或者,如果您想正确地使用Prestashop,则>]

{
  "name": "YourName/YourModuleName",
  "description": "Awesome description",
  "autoload": {
    "psr-4": {
      "Prestashop\\Module\\YourModuleName": "src/",
      "Prestashop\\Module\\YourModuleName\\Repository": "src/Repository/",
    }
  },
  "config": {
    "prepend-autoloader": false
  },
  "type": "prestashop-module"
}
© www.soinside.com 2019 - 2024. All rights reserved.