Задать вопрос
Ответы пользователя по тегу PHP
  • MVC. Как преобразовать (вынести) View из контроллера в модель?

    @lod2007 Автор вопроса
    Программист
    Не знаю, с чем было связано, может комп глючил. Но сейчас все работает так, как и должно было работать с самого начала:
    //Controler.php
    $Cat= new Category(); //создаем объект класса
    $Cat->id=$id;
    $Cat->GetData();
    $Cat->Display(); // объект сам знает как себя отображать
    
    //Category_Model.php
    Class Category() {
    ...
    public function Display(){
      include('Category_view.php'); 
      }} //Class Category
    //Category_view.php
    <div>$this->MyString</div>

    Для чего это нужно!? Вот для чего. Отправляем на сервер AJAX команду вида: класс1/метод1/праметры/класс2/метод2/метод3. Т.е. Некоторый объект класса 1 должен выполнить методы: 1 (а может 2 и 3) с параметрами, а так же класс 2 должен выполнить методы 2,3 (а может и метод 1 если он у него есть) так же с праметрами.

    В Роутере строка разбирается на слова и запускается механизм:
    foreach ($_POST as $Val) {
        if (class_exists($Val)) { //проверяем, есть ли такой класс
        $MyClass=$Val; //запоминаем имя кассса
        $MyObj= new $Val();//создаем объект
       }
      
      if (!empty($MyObj)) { //если создали экземпляр класса, присваиваем ему свойства
       foreach ($_POST as $prop => $obj) {
         if (property_exists($MyClass,$obj)){ //проверяем есть ли у класса свойство, если есть присваиваем его значение
          $MyObj->$prop=$obj;
          }
        }
      }
    
     foreach ($_POST as $Met) {//  отдельно выполняем методы, после заполнения параметров
      if (!empty($MyObj)) { //если создали экземпляр класса
          if (method_exists($MyClass,$Met)){ //проверяем есть ли у класса метод, если есть, то выполняем его
          $MyObj->$Met(); //выполняем метод
          }  
        } 
      }

    Все это избавляет нас в контролере от писанины вида:
    if ($Conntrol=="LoadCentrChild") {
          if ($Action=="сlick") {
                  $Cat = new Catalog ();
                  $Cat->idLeft=$params["id"];//отправляем на вход id, по которому кликнули
                  $Cat->LoadLeftParent();//загружаем левую панель
                  $Cat->Display();/
       }
    }
    if ($Conntrol=="NewCategory") {
       if ($Action=="Create") {
           $Category = new Category();
           $Category->NameCat=$params["NameCat"];
           $Category->Create();
           $Category->Display();
       }
    }
    Ответ написан
    Комментировать