Создайте базовую модель, используя Eloquent Model для рендеринга в View - PullRequest
0 голосов
/ 12 февраля 2019

Я создал 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');
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...