2

首先,我是 IoC、ServiceProviders 和 Facades 的新手,但我猜答案在于以下内容:

从包中扩展 Eloquent 模型的最佳方法是什么(可能不止一种正确的方法,但请分享你的)。这是我打算拥有的应用程序结构:

L4 框架 + 两个独立的包(CMS 和 CRM),需要共享一些 Eloquent 模型。但是,可能存在特定于包的情况,其中包需要扩展两者都使用的 Eloquent 模型,而我不想触及基本模型。

我还计划为每个包使用单独的控制器和视图(除非包之间肯定有相同的东西)。主视图将从 L4-views 文件夹加载。这听起来对吗?(至少我已经使用了单独的控制器和视图,并且效果很好。)

我想采用打包方法的原因是我希望 CMS 和 CRM 是独立的代码和结构,因此可以通过 composer 轻松安装、卸载和更新它们。

对于实现这一切的任何建议,我都会非常高兴。另外,如果这似乎根本没有任何意义,请告诉我,我会尽力澄清自己:)

干杯!

4

2 回答 2

3

如果您在 Laravel 4 中创建一个包,那么您应该能够执行以下操作:

<?php

use Illuminate\Database\Eloquent\Model;

class YourModel extends Model {

    // Your code here
}

注意:我有点不确定你是想扩展 Eloquent 还是你自己创建的扩展 eloquent 的模型?

于 2013-06-12T22:05:37.693 回答
1

根据您上面的评论,我认为命名空间是正确的答案,因为您的模型将共享功能,并且将它们放在同一个安装中而不是单独的包中更有意义。这是一个例子:

在 /app/models/Entities/CRM/UserEntity.php

<?php namespace Project\Models\Entities\CRM;

use Eloquent;

Class User extends Eloquent {
    ...
    public function owner()
    {
        return $this->belongsTo('Project\Models\Entities\CMS\User');
    }
}

在 /app/models/Entities/CMS/UserEntity.php

<?php namespace Project\Models\Entities\CMS;

use Eloquent;

Class User extends Eloquent {
    ...
    public function contacts()
    {
        return $this->hasMany('Project\Models\Entities\CRM\User');
    }
}

更不用说您应该在composer.json中填充 Models 命名空间

{
   ...
    "autoload":{
        "psr-0": { "Project\\Models": "app/models/" }
    }
}
于 2013-06-25T09:41:47.950 回答