所以我尝试在Symfony4的服务中加载一个类。
我将其加载为classname
还是App\to\class\name\classname
都没关系。
它会产生相同的错误。
其他帖子说,您需要添加整个完全合格的类名。.
这行不通。我想念什么吗?
下面的代码:
<?php
// src/Service/AdwordsService.php
namespace App\Service;
use App\Service\AdTypes\ExpendedTextAdTypes as ExpendedTextAdTypes;
class AdwordsService{
...
public function getAdsModel($ad) //<-- for example "EXPANDED_TEXT_AD"
{
$type = explode('_',strtolower($ad->getType()));
$modelName = array_map('ucfirst', $type);
$modelName = implode('',$modelName).'Types';
// will load ExpandedTextAdTypes
return new $modelName($ad);
}
...
}
它尝试加载的类:
<?php
// src/Service/AdTypes/ExpendedTextAdTypes.php
namespace App\Service\AdTypes;
class ExpendedTextAdTypes
{
private $adData;
public function __construct($ad)
{
$this->adData = $ad;
}
}
答案 0 :(得分:0)
最终的问题是一个简单的错字:EXPANDED_TEXT_AD与EXPENDED_TEXT_AD 以及需要使用完全限定的类名:
// No need for any use statements
// use App\Service\AdTypes\ExpendedTextAdTypes as ExpendedTextAdTypes;
public function getAdsModel($ad) //<-- for example "EXPENDED_TEXT_AD"
{
$type = explode('_',strtolower($ad));
$modelName = array_map('ucfirst', $type);
$modelName = implode('',$modelName).'Types';
$modelName = 'App\\Service\\AdTypes\\' . $modelName; // Add this
return new $modelName($ad);
}
通常,typo questions are considered to be off-topic。但是这个问题实际上有两个问题,并指出不需要use语句。因此,我认为它可以作为答案。
问题的标题也令人误解。我单击该问题是因为我从未在错误消息中看到 CLASS 。最好将实际的错误消息发布出来,这样就可以更容易检测到错字。
最后,是一些不请自来的建议。从EXPENDED_TEXT_AD到ExpendedTextAdTypes的这种转换可能难以维护,并且肯定会将您锁定在类命名方案中。为什么不只使用ExpendedTextAd而不是EXPENDED_TEXT_AD? Symfony一直在做这种事情。