尝试从命名空间加载类。您是否忘记了另一个命名空间的"use"语句?使用供应商 PHP 命名空间



我正在尝试将php命名空间加载到我的symfony项目中,但在运行时不断收到以下错误。

Attempted to load class "FM" from namespace "VehicleTrackingSrcVendorsFM".
Did you forget a "use" statement for another namespace?

从中调用它的控制器

namespace BWTFMBundleController;
use VehicleTrackingSrcVendorsFMFM;
class FMController extends Controller
{
    /**
     * @Route("/fuel_data", name="fuelData")
     * @return SymfonyComponentHttpFoundationResponse
     */
    public function fuelDataAction(Request $request)
    {
        //...
        $tripProcesses = new FM(); //<-this is the line where I get the error
        $_results = $tripProcesses->getTripWithTotals($form->get('fleetNo')->getData(), $form->get('startDate')->getData(), $form->get('endDate')->getData());
    }
}

FM.php 文件位于目录 vendor/bwt/vehicle_tracking/src/vendortracking.interface 和 tracking.class 位于同一目录中

<?php
namespace VehicleTrackingSrcVendorsFM;
// : Includes
include_once (dirname(realpath(__FILE__)) . DIRECTORY_SEPARATOR .    'tracking.interface');
include_once (dirname(realpath(__FILE__)) . DIRECTORY_SEPARATOR . 'tracking.class');
// : End
use VehicleTrackingSrcVendorsVendors as Vendors;
use VehicleTrackingSrcVendorsTrackingInterface as TrackingInterface;
class FM extends VendorsVendors implements TrackingInterfaceTrackingInterface
{
    public function getTrackingData()
    {...}
}

autoload_namespace.php

 <?php
// autoload_namespaces.php @generated by Composer
$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);
return array(
    //...
    '' => array($vendorDir . '/bwt/vehicle_tracking/src/vendors'),
);

我们最终通过添加

"autoload" : {
    "psr-4" : {
        "Vendors\" : "src/"
    }
},

到外部包的 composer.json,并将类的命名空间更改为 namespace Vendors;,以便它与目录相同。

我必须运行composer update -o来优化自动加载机,否则我不断收到这些错误。

通常,

您应该避免编辑供应商下的任何内容。 您的更改将丢失。 在这种情况下,您可以编辑项目 composer.json 文件

"autoload": {
    "psr-4": {
        "": "src/",
        "VehicleTracking\Src\Vendors\FM\": "vendor/bwt/vehicle_tracking/src/vendors"
    },

进行更改后,运行作曲家转储自动加载以更新自动加载内容。

我给出的路径是基于你的问题,至少这是意图。 它假设 FM.php 直接位于 vendor/bwt/vehicle_tracking/src/vendor 下

我只测试了一个假的FM.php课。 事实上,那里有包含语句和其他一些奇怪的代码可能会产生其他错误。

相关内容

最新更新