首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Symfony依赖注入和您自己的服务

Symfony依赖注入和您自己的服务
EN

Stack Overflow用户
提问于 2014-02-25 09:59:36
回答 4查看 1.3K关注 0票数 1

我试图在symfony依赖项注入组件的帮助下将自己的类注册为一个服务,但我在类加载方面遇到了问题。

我的文件结构如下:

我的生成器类很简单

代码语言:javascript
复制
<?php

namespace Localhost\Service\String;

class Generator {

    private $iStringLength;

    public function __construct($iNewStringLength = 5) {
        $this->iStringLength = $iNewStringLength;
    }

    public function getRandomString() {
        $sChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
        $sRandChar = substr(str_shuffle(str_repeat($sChars,5)),0, $this->iStringLength);

        return $sRandChar;
    }
}

索引是

代码语言:javascript
复制
<?php

require_once 'vendor/autoload.php';

/*
spl_autoload_register(function ($sClass) {
    echo $sClass;
    require_once str_replace('\\', '/', $sClass) . '.php';
});
*/

use Localhost\Service\String\Generator;

/*
$oStringGenerator = new Generator(55);
echo $oStringGenerator->getRandomString();
*/

use Symfony\Component\DependencyInjection\ContainerBuilder;

$oContainer = new ContainerBuilder();
$oContainer
    ->register('generator', 'Generator')
    ->addArgument('15');

$oGeneratorService = $oContainer->get('generator');
echo $oGeneratorService->getRandomString();

我得到的是一个错误

代码语言:javascript
复制
Fatal error: Uncaught exception 'ReflectionException' with message 'Class Generator does not exist' in D:\Localhost\Apache\htdocs\Test\vendor\symfony\dependency-injection\Symfony\Component\DependencyInjection\ContainerBuilder.php:959 Stack trace: #0 D:\Localhost\Apache\htdocs\Test\vendor\symfony\dependency-injection\Symfony\Component\DependencyInjection\ContainerBuilder.php(959): ReflectionClass->__construct('Generator') #1 D:\Localhost\Apache\htdocs\Test\vendor\symfony\dependency-injection\Symfony\Component\DependencyInjection\ContainerBuilder.php(493): Symfony\Component\DependencyInjection\ContainerBuilder->createService(Object(Symfony\Component\DependencyInjection\Definition), 'generator') #2 D:\Localhost\Apache\htdocs\Test\index.php(26): Symfony\Component\DependencyInjection\ContainerBuilder->get('generator') #3 {main} thrown in D:\Localhost\Apache\htdocs\Test\vendor\symfony\dependency-injection\Symfony\Component\DependencyInjection\ContainerBuilder.php on line 959

或者作为一幅画

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-02-25 10:58:32

代码语言:javascript
复制
$oContainer = new ContainerBuilder();
$oContainer
    ->register('generator', 'Localhost\Service\String\Generator')
    ->addArgument('15');
票数 2
EN

Stack Overflow用户

发布于 2014-02-25 10:26:22

解决方案很简单,我忘记修改composer配置来加载我的服务。

代码语言:javascript
复制
"autoload": {
    "psr-0": {"Localhost": "src/"}
},
票数 2
EN

Stack Overflow用户

发布于 2017-05-22 22:41:53

编辑:自Symfony 3.3+ (2017年5月)以来,您可以使用register()类名服务快捷方式:

代码语言:javascript
复制
$containerBuilder = new ContainerBuilder();
$containerBuilder->register(Localhost\Service\String\Generator::class)
    ->addArgument('15');

,因为5.5+,您可以使用更多的防故障::class表示法:

代码语言:javascript
复制
$containerBuilder = new ContainerBuilder();
$containerBuilder->register('generator', Localhost\Service\String\Generator::class)
    ->addArgument('15');

现在,当类名未键入时,IDE将突出显示它.

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22010568

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档