我有一大堆Laravel 4软件包,可以为应用程序添加简单的内容管理页面,以及添加客户评价的其他软件提供基本功能。
这些软件包包括迁移,模型,控制器,路由和示例视图以及将它们添加到项目中的部分内容非常快速和简单。
在我目前的项目中,我必须从页面添加一个belongsTo关系到推荐书,以显示通过CMS选择的特定页面上的相关推荐。
我创建了一个迁移,将字段添加到pages表中,在我的应用程序中扩展了页面包模型并添加了关系,并将CMS包配置文件配置为使用我的模型而不是包的。
我现在遇到的问题是包控制器的show方法呈现给出一个slug的页面,使用包的模型而不是我的应用程序中扩展包模型的模型。
让package controller使用我应用的模型而不是包中的模型的最佳方法是什么?
我想也许我可以更新软件包(因为它是我的)将命名空间模型文件的名称添加到软件包的配置文件中,然后我可以在我的应用程序版本中将其更改为我的应用程序的模型文件配置文件,并更新包控制器以查看配置文件而不是硬编码包模型的名称?
或许我应该以某种方式使用IoC容器,但我不确定如何去做?也许添加一个构造函数,希望将一个包模型的实例注入其中,但是如何让IoC容器注入我的应用程序的模型而不是包的模型?有没有人有任何建议?
答案 0 :(得分:2)
我想出来并使用IoC容器做到了。我如上所述更新了包控制器,以使用构造函数,该构造函数需要将包模型的实例注入其中,然后将以下内容添加到app / start / global.php的末尾:
App::bind('Fbf\LaravelPages\PagesController', function() {
return new Fbf\LaravelPages\PagesController(new Page);
});
这是我的app / models目录中的模型
<?php
class Page extends Fbf\LaravelPages\Page {
public function testimonial()
{
return $this->belongsTo('Fbf\LaravelTestimonials\Testimonial');
}
}