首页 文章

添加自定义服务 - Symfony; Sylius

提问于
浏览
0

我不明白为什么我不能创建自定义服务 . 这两种技术都有错误 . 我在你的文档中没有找到任何相关内容 .

enter image description here

# 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 回答

  • 0

    控制器默认不进行任何注入 . 他们总是可以使用_2988383来获取您的所有服务 .

    所以除了:

    class ImportController extends Controller {
        public function indexAction() {
            $test = $this->container->get('jdf.utils.phphelper');
            // $logger = $this->container->get('logger');
    
            return new Response('<hr>');
        }
    
    }
    

    仅供参考:缓存文件 appDevDebugProjectContainer 是自动生成的,对您的问题没有意义 .

  • 0

    我已经通过改变我的composer.json解决了这个问题 .

    对于可以使用 $this->container->get('jdf.utils.phphelper'); 所有好的代码是:

    # app/config/services.yml
    services:
    
        jdf.utils.phphelper:
            class: JDF\Utils\PhpHelper
    // src/JDF/Utils/PhpHelper.php
    
    namespace JDF\Utils;
    
    class PhpHelper {} 
    
    // src/JDF/CsvTreatmentBundle\Controller/ImportController
    
    namespace JDF\CsvTreatmentBundle\Controller;
    
    use Symfony\Bundle\FrameworkBundle\Controller\Controller;
    
    use JDF\Utils\PhpHelper;
    
    /**
    * 
    */
    class ImportController extends Controller {
    
        public function indexAction() {
    
            $test = $this->container->get('jdf.utils.phphelper');
    
            return new Response('<hr>');
        }
    
    } /*End of class*/
    

    重要:composer.json:

    "autoload": {
        "psr-4": {
            "JDF\\CsvTreatmentBundle\\": "src/JDF/CsvTreatmentBundle/",
            "JDF\\Utils\\": "src/JDF/Utils/"
        },
        "classmap": ["app/AppKernel.php", "app/AppCache.php"]
    },
    

    和CLI命令: php composer.phar dump-autoload

    感谢colburton这个时间并对我的问题感兴趣 .

相关问题