2017-07-19 17 views
0

私は理解できませんなぜ私はカスタムサービスを作成できません。私は両方の技術でエラーが発生します。私はあなたの文書の中で何も見つけられません。カスタムサービスを追加 - Symfony; Sylius

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) { 
    } 

} 

ケース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*/ 

エラー1: キャッチできる致命的なエラー:JDFに渡された引数1 \ CsvTreatmentBundle \ Controller \ ImportController :: __ construct()はJDF \ Utils \ PhpHelperのインスタンスでなければならず、指定されていない場合はC:\ kitutilitaire \ vendor \ symfonyの\ symfonyの\ SRC \ symfonyの\コンポーネントライン202上の\ HttpKernel \コントローラ\ ControllerResolver.phpと 500内部サーバーエラーが定義されて - ContextErrorException

ケース2(単に取得する()コントローラメソッドを使用します):

// 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*/ 

エラー2: は、名前空間 "JDF \ Utilsの" からクラス "PhpHelper" をロードしようとしました。 別の名前空間に「使用」ステートメントを忘れましたか?

スタックトレース

in var\cache\dev\appDevDebugProjectContainer.php at line 3555 - 
     */ 
     protected function getJdf_Utils_PhphelperService() 
     { 
      return $this->services['jdf.utils.phphelper'] = new \JDF\Utils\PhpHelper(); 
     } 
     /** 

EDIT:あなたの助けをadvenceで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"] 
}, 

ありがとうございます。

答えて

0

コントローラにはデフォルトで注入が行われません。彼らは$this->containerあなたのすべてのサービスにアクセスするために常に利用可能です。

だから、より行うにはより多くの何も:

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

     return new Response('<hr>'); 
    } 

} 

はFYI:キャッシュファイルappDevDebugProjectContainerは、自動生成され、あなたの問題に対する重要ではありません。

+0

サービスをservices.ymlでどのように定義しますか?私は私のservices.yml(最初のコードショー)を書いた – Xenofexs

+0

@ Xenofexs:あなたは正しい、私の悪いです。私は答えを更新しました。 – colburton

+0

更新していただきありがとうございます。ケース2で編集しました。編集しました。私はこの行をunvolontaryで削除しました。 このコードでは、error2(名前空間 "JDF \ Utils"からクラス "PhpHelper"を読み込もうとしました。) あなたは別の名前空間に "use"ステートメントを忘れていましたか?) そして、行バグ: 'return $ this-> services ['jdf.utils.phphelper'] = new \ JDF \ Utils \ PhpHelper();' – Xenofexs

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コマンド:用colburtonするphp composer.phar dump-autoload

感謝この時間と私の問題での関心。

関連する問題