1

我在控制器中使用存储库/接口时遇到问题。我的应用程序正在使用 Laravel 4。

我当前的控制器继承树是:

 +- BaseController
     +- FrontendController
         +- ProductController

FrontendController我正在获取/设置一些东西以在我的控制器中全面使用,所以我在构造函数中设置了接口,如下所示:

class FrontendController extends BaseController
{
    /**
     * Constructor
     */
    public function __construct(SystemRepositoryInterface $system,
                                BrandRepositoryInterface $brands,
                                CategoryRepositoryInterface $categories)

但是,这现在意味着我必须(再次)通过所有子控制器中的接口发送,如下所示:

class ProductController extends FrontendController
{
    /**
     * Constructor
     */
    public function __construct(SystemRepositoryInterface $system,
                                BrandRepositoryInterface $brands,
                                CategoryRepositoryInterface $categories,
                                ProductRepositoryInterface $products)
    {
        parent::__construct($system, $brands, $categories);

我是 PHP 的这个级别/领域的新手,但感觉不对,我是否遗漏了一些明显的东西?

4

1 回答 1

1

不,你没有错。PHP 不像其他语言那样支持方法重载。所以你FrontendController每次都必须重写你的构造函数(兄弟提示:一个好的 IDE 应该在这里帮助你很多;>)。Laravel 通过其 IoC-Container 解决了所有控制器构造函数的依赖关系。只需添加

App::bind('SystemRepositoryInterface', function() {
    return new EloquentSystemRepository();
});

对于应用程序的引导文件之一中的每个存储库。该框架将为您进行注入。

于 2013-08-02T05:23:06.437 回答