如果已经存在,我很抱歉,但我的搜索无法找到答案。
我有一个作曲家包,并且只想在现有模型不存在(或扩展自定义模型)的情况下使用我的模型,但我似乎无法弄清楚如何指定"使用"在我的作曲家模型中正确命令。因为我不知道" app"的名称。使用包裹,我无法延长它。
<?php
namespace MyComposer\Package\Models;
use Illuminate\Database\Eloquent\Model;
class MyPackageModel extends Model
{
如果我把它作为配置选项,我就不能在扩展中使用它,即class MyPackageModel extends config('custom_model_name')
我原本以为我应该在ServiceProvider中进行检查,但我似乎找不到合适的代码来注册在那里使用的正确型号名称。
感谢。
答案 0 :(得分:1)
我还发现有时它对基本模型有用1)实现一个接口,可以在你的包的逻辑中检查而不依赖于一个特定的类(毕竟,它意味着被覆盖,对吧?); 2)将大部分逻辑放在 trait 中,&#34; local&#34;模型可以在不必扩展模型的情况下使用(如果本地模型因任何原因已经扩展了其他类,则至关重要)。
您如何处理代码非常依赖于您计划对该模型执行的操作。比如说,您有一个支持类,可以在数据库中创建媒体条目。这是您的包装模型:
<?php
namespace Namespace\Package;
class Media
{
//...
}
这是默认配置:
<?php
return [
'model' => \Namespace\Package\Media::class,
];
这是一个示例操作,您实际上会考虑本地应用来覆盖您自己的模型:
<?php
namespace Namespace\Package;
class MediaManager
{
protected function getModel()
{
$model = config('package.model');
return new $model;
}
public function createMedia($attributes = [])
{
$media = $this->getModel($attributes);
$media->save();
return $media;
}
}
也就是说,你从不直接引用任何Media
模型。你通过MediaManager
进行操作。当然,逻辑非常简单,但希望它足以让人们了解更多。