我目前正在使用Laravel 4中的内容管理系统。 目前的情况是Page类有许多Item类。干净利落。 随着时间的推移,Item类的大小增加,我们实现了Item可以存储的新功能或数据。此时,一个Item可以包含-containers,纯文本,图像,导航等信息,除此之外" shared"每个项目总是有的数据,例如。 position,is_visible等。
现在我的信念是当前的状态是无法管理的,所以我开始考虑将Item类分为多个&34;继承"类(作为C#开发人员的背景),如下所示:
Item.php
Container.php继承Item.php
Text.php继承Item.php
(所以这一切从C#的角度来看)。
现在,由于我在Laravel工作,让Item类继承自Eloquent,我认为正确的解决方案是通过morphMany和morphTo functionallity将Container / Text类绑定到Item类。我碰到的那面墙是这样的:我应该选择"创造"一个Text对象:我如何确保"基础数据"在Item类中也被填充了。
在设置系统时,我正在使用迁移来填充第一个记录。
Text.php
class Text extends Eloquent {
protected $fillable = [];
public function items()
{
return $this->morphMany('Item', 'itemable');
}}
Item.php
class Item extends Eloquent
{
protected $table = "items";
public function page()
{
return $this->belongsTo('Page');
}
public function itemable()
{
return $this->morphTo();
}
}
我将免除表格设置迁移,它是我感兴趣的插页:
public function up()
{
DB::table('containers')->insert(array(
'bgColor'=>'#ffebcf',
'bgImage'=>'img/header-jumbotron.png',
'bgImageRepeat'=>'repeat',
'bgPosition'=>'left top',
));
}
执行此操作时,它不会获得初始Item对象的任何信息。但这应该是必需的,因为没有这些信息,Container对象根本就不应该被激活。也许我的想法有点奇怪,或者我错过了一些非常明显的东西。我正在寻找适合我的思维过程的整洁解决方案。 - 找不到了!这时:墙已经袭来。 另外 - 我想对我的方法提出一些反馈。这首先是正确的做法吗?理解!