laravel中的存储库模式似乎不起作用

时间:2018-11-14 18:55:10

标签: php laravel repository-pattern

App::bind('App\Http\Repositories\languageRepository',
                   function( $app, array $parameters)
{
    return new App\Http\Repositories\languageRepository($parameters[0]);
} );

Route::get('/test/{id}', 'testController@getme');



<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Repositories\languageRepository;
class test extends Controller
{
    //
    protected $language;
    public function __construct(languageRepository $rep){
        $this->language = $rep;
    }


    public function getme(){
        $this->language->getMe();
    }
}

例如,当用户访问路由/ test / 5时,它将转到测试控制器。我想做的是它应该自动将我的route参数传递给App:bind函数,并自动创建languageRepository类,并将构造函数值作为我的路由参数传递。发生的是代码实际上告诉我$ parameters [0]是未定义的偏移量。这是为什么?我已经尝试过App :: make,但是如何将参数从路由传递到App :: make?

1 个答案:

答案 0 :(得分:1)

您可以使用容器的请求实例来完成此操作,以获取查询参数:

App::bind('App\Http\Repositories\languageRepository',function($app)
{
    $request = $app['request'];

    $parameters = $request->all();

    return new App\Http\Repositories\languageRepository($parameters[0]);
});

您可以使用容器的request实例为route参数完成此操作:

App::bind('App\Http\Repositories\languageRepository',function($app)
{
    $request = $app['request'];

    $segment = $request->segment(1);

    return new App\Http\Repositories\languageRepository($segment);
});