Я создал ViewModel, которая имеет две модели Eloquent в качестве свойств.Я хочу использовать ViewModel с двумя не-Eloquent моделями с теми же свойствами, что и у таблиц / Eloquent моделей, используемых для заполнения макетов объектов в качестве свойств ViewModel после создания экземпляра.
Идея состоит в том, что я могу создать эту ViewModel "на лету" и ее свойства, также известные как Eloquent Models.
Есть и как можно создавать моделикоторые используют предопределенные красноречивые модели в моем проекте / пакете, фактически не имея никакого отношения к таблице, кроме ее свойств schema :: table?Модели ImageItem и PageInfo являются моделями Eloquent и используются по назначению, но я хочу использовать их шаблоны классов для создания динамических объектов, которые не связаны с базой данных.Я собираюсь удалить эти объекты, как только страница будет отрисована, они исчезли.
Проблема, с которой я столкнулся, заключается в том, что представление не идентифицирует объект в его текущем состоянии
Вотпример моего кода:
Базовая модель представления, которая передается для представления в виде компактного ('page')
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, но в данном случае я хочу использовать их только в качестве шаблонов.Это значит, что я не буду сохранять эти объекты в базе данных.Думайте о них как о дочерних ViewModels на данный момент, аналогично тому, как работает 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');
}