我创建了一个ViewModel,它具有两个Eloquent模型作为属性。我想将ViewModel与两个非雄辩的模型一起使用,它们的属性与表/雄辩的模型具有相同的属性,该表/雄辩的模型用于在实例化后将实体模型填充为ViewModel的属性。
这个想法是,我可以即时创建此ViewModel 及其属性(也称为Eloquent模型)。
是和如何在我的项目/程序包中创建使用预定义的雄辩模型的模型,除了其schema :: table属性外,实际上与表没有任何关系? ImageItem和PageInfo模型是雄辩的模型,可以直接使用,但是我想使用它们的类模板来创建与数据库无关的动态对象。页面渲染完毕后,我将废弃这些对象。
我遇到的问题是View无法识别当前状态的对象
这是我的代码示例:
基本视图模型,以紧凑(“页面”)的形式传递给视图
class LandingPageViewModel extends Model
{
ImageItem $img;
PageInfo $info;
__construct($img = NULL, $info = NULL){
if(!$img && !$info){
$img = ImageItem::where("key","=","notfound").first();
$info = PageInfo::where("key","=","notfound").first();
}
else{
$this->img = $img;
$this->info = $info;
}
}
}
这对我来说有点模糊。这是两个Eloquent模型,但是在这种情况下,我只想将它们用作模板。意思是我不会将这些对象保存到数据库中。此时,将它们视为子ViewModel,类似于ASP.NET MVC的工作方式
public ImageItem(){
__construct(){
parent::__construct($attributes);
}
}
public PageInfo(){
__construct(){
parent::__construct($attributes);
}
}
在控制器中,我有一个函数可以根据错误代码创建错误页面,并将LandingPageViewModel返回到包含非雄辩对象的共享视图
function getErrorPage($params){
//do some looping through params and assign value to properties based on key/column names of eloquent models stored in my db
$mockImage = new ImageItem();
$mockInfo = new PageInfo();
foreach($params as $k => $v){
if($k == `***Schema::getColumnListing('image_item')***`){ //image_item is table name
$mockImage->column['name'] = $v;
}
etc....
$page = new LandingViewModel($mockImage,$mockInfo);
return view("landing.index",compact('page');
}