使用口才模型创建基本模型以在View中渲染

时间:2019-02-12 03:14:09

标签: php laravel-5 eloquent

我创建了一个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');
}

0 个答案:

没有答案