Laravel 5.0 - 从服务提供商处使用绑定的位置?

时间:2014-10-29 14:24:55

标签: php laravel laravel-routing laravel-5

在我的App\Providers\RouteServiceProvider中,我创建了方法register

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

但是没有用,我也不能使用$ this-> app-> make(' JustTesting');

如果我按照下面的代码执行,它可以工作,但我想注入控制器。

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

我应该如何绑定?如果不允许,我为什么要使用bindShared方法?

1 个答案:

答案 0 :(得分:1)

看起来好像你的第一个控制器路由正在抛出一个ReflectionException,因为在IoC Container尝试解析它时,对象JustTesting实际上并不存在。

此外,您应该编写一个接口代码。绑定JustTestingInteraceMyClass将使Laravel知道"好的,当请求JustTestingInterface的实现时,我应该将其解析为MyClass。&#34 ;

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