尝试从命名空间加载类。您是否忘记了另一个命名空间的“use”语句?与供应商php命名空间

时间:2017-01-25 14:47:58

标签: php symfony

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

Attempted to load class "FM" from namespace "VehicleTracking\Src\Vendors\FM".
Did you forget a "use" statement for another namespace?

调用它的控制器
namespace BWT\FMBundle\Controller;

use VehicleTracking\Src\Vendors\FM\FM;

class FMController extends Controller
{

    /**
     * @Route("/fuel_data", name="fuelData")
     * @return \Symfony\Component\HttpFoundation\Response
     */
    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 / vendors目录中 tracking.interface和tracking.class位于同一目录

<?php
namespace VehicleTracking\Src\Vendors\FM;
// : Includes
include_once (dirname(realpath(__FILE__)) . DIRECTORY_SEPARATOR .    'tracking.interface');
include_once (dirname(realpath(__FILE__)) . DIRECTORY_SEPARATOR . 'tracking.class');
// : End
use VehicleTracking\Src\Vendors\Vendors as Vendors;
use VehicleTracking\Src\Vendors\TrackingInterface as TrackingInterface;

class FM extends Vendors\Vendors implements TrackingInterface\TrackingInterface
{
    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'),
);

2 个答案:

答案 0 :(得分:0)

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

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

进行更改后,运行composer dump-autoload更新自动加载内容。

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

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

答案 1 :(得分:0)

我们最终通过添加

解决了这个问题
"autoload" : {
    "psr-4" : {
        "Vendors\\" : "src/"
    }
},

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

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