2016-03-24 10 views
0

これは(私は正しい用語を使用していますかどうかわからない)私はIOCにLaravel DIは

<?php 

namespace App\Providers; 


use Illuminate\Support\ServiceProvider; 
use Illuminate\Support\Facades\App; 

class RUserServiceProvider extends ServiceProvider 
{ 
    /** 
    * Register the application services. 
    * 
    * @return void 
    */ 
    public function register() 
    { 
     App::bind('user', function() { 
      return new \App\Http\Responses\RUser; 
     }); 
    } 
} 

これをバインドする方法これは

<?php 

namespace App\Facades; 

use Illuminate\Support\Facades\Facade; 

class UserFacade extends Facade 
{ 
    protected static function getFacadeAccessor() 
    { 
     return 'user'; 
    } 
} 

私のファサードクラスでありますユーザーエンティティの実際のコードを含む基盤クラスです

<?php 

namespace App\Http\Responses; 

use Illuminate\Database\Eloquent\ModelNotFoundException; 
use App\Utils\TokenGenerator; 
use App\Models\User; 
use Validator; 
use Hash; 

class RUser 
{ 
    protected $token_generator; 

    public function __construct(TokenGenerator $token_generator) 
    { 
     $this->token_generator = $token_generator; 
    } 

    /** 
    * Signup User 
    * @param Request $request 
    * @return array $response 
    */ 
    public function signup($data) 
    { 
     $response = []; 
     $access_token = $this->token_generator->generate(32); 
     $user = User::create([ 
      'email' => $data->email, 
      'password' => Hash::make($data->password), 
      'company_name' => $data->company_name, 
      'access_token' => $access_token 
     ]); 
     $response['user_id'] = $user->_id; 
     $response['access_token'] = $user->access_token; 
     return $response; 
    } 
} 

これは私のUserControllerで自分のRUserクラスを使用している方法です

<?php 

namespace App\Http\Controllers; 

use App\Http\Controllers\Controller; 
use Illuminate\Http\Request; 
use App\Models\User; 
use Validator; 
use FUser; 

class UserController extends Controller 
{ 
    /** 
    * Signup User 
    * @param Request $request 
    * @return array $response 
    */ 
    public function store(Request $request) 
    { 
     $this->request = $request; 
     $payload = json_decode($this->request->getContent()); 
     if($this->validateJson('user.create', $payload)) { 
      $validator = Validator::make((array) $payload, User::$rules); 
      if ($validator->fails()) { 
       $messages = $validator->errors(); 
       return $this->sendResponse(false, $messages); 
      } 

      $response = FUser::signup($payload); 
      return $this->sendResponse(true, $response); 
     } 
    } 
} 

さて問題は、私はそれが正常にコントローラクラスに依存性を注入としてLaravelは自動的TokenGenerator依存関係を注入することを期待しています私のRUSERクラスです。しかし、私はなぜそうしていないのか分かりません。

これは私がRUser.phpライン15で

ErrorExceptionを取得していますものです:RUSER \ のApp \のHttp \レスポンスに渡される引数1 :: __構築物()は のApp \ Utilsののインスタンスでなければなりません\ TokenGenerator、どれを使用すると、コンテナが依存関係を注入する場合は、あなたが使用する必要があり、与えられたライン29 に /var/www/html/MyApp/app/Providers/RUserServiceProvider.phpに呼ばれ、

+0

[本](http://stackoverflow.com/questions/16957790/how-do代わりにネイティブnewオペレータのTHOD -i-create-a-facade-class-with-laravel)が役立つかもしれません! – Drudge

答えて

0

を定義しコンテナのmake()

App::bind('user', function($app) { 
    return $app->make('App\Http\Responses\RUser'); 
}); 

ように、より簡潔に書くことができる:

App::bind('user', 'App\Http\Responses\RUser');