2016-03-24 15 views
0

Bu (i doğru terimleri kullanıyorum emin değilim) i IOC içinelaravel 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; 
     }); 
    } 
} 

Bu bağlama nasıl budur

<?php 

namespace App\Facades; 

use Illuminate\Support\Facades\Facade; 

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

benim Cepheleri Sınıf olduğunu kullanıcı varlık

<?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; 
    } 
} 

için fiili kodunu içeren Dayanak sınıftır Ve benim UserController benim Ruser sınıfını kullanıyorum bu nasıl olduğunu

<?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); 
     } 
    } 
} 

Şimdi problem ben normalde Kontrolör sınıflarında bağımlılıkları enjekte otomatik olarak TokenGenerator Bağımlılık enjekte etmek laravel bekliyorum benim Ruser sınıfındadır. Ama neden böyle olmadığını anlamıyorum.

Bu

i RUser.php hattında 15

ErrorException alıyorum budur: Ruser \ Yanıtları \ App \ Http geçirilen Argüman 1 :: __ construct() App \ Utils bir örneği olmalıdır \ TokenGenerator, hiçbiri konteyner bağımlılıkları enjekte etmek istiyorsanız hattı 29 üzerinde /var/www/html/MyApp/app/Providers/RUserServiceProvider.php denilen, verilen ve

+0

[Bu] (http://stackoverflow.com/questions/16957790/how-do -i-bir-cephesi-class-with-laravel) yardımcı olabilir! – Drudge

cevap

0

tanımlanmış, kullanmak gerek konteynerin make() beni metod ile yerine doğal new operatörün:

daha fazla öz yazılabilir
App::bind('user', function($app) { 
    return $app->make('App\Http\Responses\RUser'); 
}); 

:

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