我正在尝试将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课。 事实上,那里有包含语句和其他一些奇怪的代码可能会产生其他错误。