2014-10-29 96 views
4

在我App\Providers\RouteServiceProvider我沒有創建方法registerLaravel 5.0 - 在哪裏使用服務提供商的綁定?

public function register() 
{ 
    $this->app->bindShared('JustTesting', function($app) 
    { 
     die('got here!'); 
     // return new MyClass; 
    }); 
} 

我應該在哪裏使用?我沒有創造App\Http\Controllers\HomeController的方法:

/** 
* ReflectionException in RouteDependencyResolverTrait.php line 53: 
* Class JustTesting does not exist 
* 
* @Get("/test") 
*/ 
public function test(\JustTesting $test) { 
    echo 'Hello'; 
} 

但沒有作品,我也不能使用$這 - > APP->讓( 'JustTesting');

它的工作原理,如果我做下面的代碼,但我想注入控制器。

/** 
* "got here!" 
* 
* @Get("/test") 
*/ 
public function test() { 
    \App::make('JustTesting'); 
} 

我該如何結合我想要的?如果不允許,爲什麼我應該使用bindShared方法?

回答

1

看起來好像您的第一個控制器路由拋出了ReflectionException,因爲對象JustTesting在IoC容器試圖解析時並不存在。

此外,你應該編碼到一個接口。綁定JustTestingInteraceMyClass將使Laravel知道「好的,當請求執行JustTestingInterface時,我應該將其解析爲MyClass」。

RouteServiceProvider.php:

public function register() 
{ 
    $this->app->bindShared('App\Namespace\JustTestingInterface', 'App\Namespace\MyClass'); 
} 

內,您的控制器:

use Illuminate\Routing\Controller; 
use App\Namespace\JustTestingInterface; 

class TestController extends Controller { 

    public function test(JustTestingInterface $test) 
    { 
     // This should work 
     dd($test); 
    } 
} 
+0

我不想用'MyClass',因爲它可以在未來改變到另一個類(如另一個供應商,但實現相同的接口)。那麼我可以在我的控制器中使用'... test(JustTestingInterface $ test)'嗎?然後它應該被解析爲'MyClass'(或者我想用'bindShared'方法綁定的另一個類) – 2014-11-10 14:50:29

+0

@GiovanneAfonso我修復了我原來的代碼,這是不正確的....'JustTestingInterface'應該是一個接口,由'MyClass'。然後,你會將'JustTestingInterface'綁定到'MyClass',這樣Laravel在請求'JustTestingInterface'的實現時就會知道使用'MyClass'。 – Inda5th 2014-11-10 18:01:43

相關問題