我不明白为什么我不能创建自定义服务 . 这两种技术都有错误 . 我在你的文档中没有找到任何相关内容 .
# app/config/services.yml
services:
jdf.utils.phphelper:
class: JDF\Utils\PhpHelper
// src/JDF/Utils/PhpHelper.php
namespace JDF\Utils;
class PhpHelper
{
/**
* [pdebug description]
* @param string $var The string to beautiful show
* @param string $msg Description of the $var
* @param integer $displayNone
* @return echo pre print_r $var string
*/
public function pdebug ($var, $msg = '', $displayNone = 0) {
}
}
Case 1 : (在__construct函数中传递PhpHelper)
// src/JDF/CsvTreatmentBundle\Controller/ImportController
namespace JDF\CsvTreatmentBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Response;
use JDF\Utils\PhpHelper;
use Psr\Log\LoggerInterface;
/**
*
*/
class ImportController extends Controller {
function __construct(
PhpHelper $PhpHelper
) {
}
public function indexAction() {
//$test = $this->container->get('jdf.utils.phphelper');
return new Response('<hr>');
}
} /*End of class*/
Error 1 : 可捕获的致命错误:传递给JDF的参数1 \ CsvTreatmentBundle \ Controller \ ImportController :: __ construct()必须是JDF \ Utils \ PhpHelper的实例,没有给出,在C:\ kitutilitaire \ vendor \ symfony \ symfony \ src \中调用第202行的Symfony \ Component \ HttpKernel \ Controller \ ControllerResolver.php并定义了500内部服务器错误 - ContextErrorException
Case 2 (只需使用get()控制器方法):
// src/JDF/CsvTreatmentBundle\Controller/ImportController
namespace JDF\CsvTreatmentBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Response;
use JDF\Utils\PhpHelper;
use Psr\Log\LoggerInterface;
/**
*
*/
class ImportController extends Controller {
function __construct(
//PhpHelper $PhpHelper
// LoggerInterface $logger
) {
}
public function indexAction() {
$test = $this->container->get('jdf.utils.phphelper');
// $logger = $this->container->get('logger');
return new Response('<hr>');
}
} /*End of class*/
Error 2 : 尝试从命名空间"JDF\Utils"加载类"PhpHelper" . 您是否忘记了另一个命名空间的"use"语句?
堆栈跟踪
in var\cache\dev\appDevDebugProjectContainer.php at line 3555 -
*/
protected function getJdf_Utils_PhphelperService()
{
return $this->services['jdf.utils.phphelper'] = new \JDF\Utils\PhpHelper();
}
/**
编辑:composer.json自动加载
"autoload": {
"psr-4": {
"AppBundle\\": "src/AppBundle/",
"JDF\\CsvTreatmentBundle\\": "src/JDF/CsvTreatmentBundle/",
"JDF\\Utils\\": "src/JDF/Utils/PhpHelper"
},
"classmap": ["app/AppKernel.php", "app/AppCache.php"]
},
感谢advence的帮助 .
2 回答
控制器默认不进行任何注入 . 他们总是可以使用_2988383来获取您的所有服务 .
所以除了:
仅供参考:缓存文件
appDevDebugProjectContainer
是自动生成的,对您的问题没有意义 .我已经通过改变我的composer.json解决了这个问题 .
对于可以使用
$this->container->get('jdf.utils.phphelper');
所有好的代码是:重要:composer.json:
和CLI命令:
php composer.phar dump-autoload
感谢colburton这个时间并对我的问题感兴趣 .