Рубрики
Uncategorized

Использование Composer для улучшения вашего PHP – фреймворка (1) – Просмотр загрузки

Автор оригинала: David Wong.

Оригинальная статья была опубликована на моем личном сайте: Улучшение вашего Фреймворк PHP с помощью Composer (1) – Просмотр загрузки

Видишь https://github.com/johnlui/My-First-Framework-based-on-Composer для примера кода для этого урока

обзор

После последней серии учебных пособий “Пошаговое создание собственной PHP-платформы с помощью Composer” мы создали PHP-фреймворк с архитектурой RouteMVC и ORM Фундаментальной основой функциональности MFFC . Далее мы продолжим совершенствовать проект.

Давайте использовать его с этого момента. Хуже всего Начало загрузки с видом на место. Мы инкапсулируем класс загрузки представления, который поможет нам загрузить представление и передать переменные в представление. Этот класс покажет только несколько простых интерфейсов, давайте использовать их в контроллере, давайте писать код, смеясь. По-настоящему смейся, смейся. -Д

текст

Дизайн

Задача загрузки класса представления на самом деле проста:

  1. Найдите файл представления в соответствии с именем представления для поддержки папки
  2. Удобный и элегантный перенос значений переменных в представление

В этой статье мы не обойдемся без внедрения механизма шаблонов, только для загрузки файлов и передачи переменных.

Базовая подготовка

Нам нужно ввести загрузчики представлений, которые формально открывают двери для компонентизации, поэтому нам нужно провести некоторую подготовительную работу.

1. Начните компонентизацию процесса

возьмите публичный/индекс. php Код внутри отделен от начальной загрузки и создан. MFFC/bootstrap.php Документ:

addConnection(require BASE_PATH.'/config/database.php');
$capsule->bootEloquent();

изменить public/index.php Для:

На этом этапе мы отделили файл ввода от начального и определили две глобальные константы. БАЗОВЫЙ ПУТЬ и ОБЩЕДОСТУПНЫЙ ПУТЬ

Здесь нам нужно обратить особое внимание на тот факт, что шаг “введение профиля маршрутизации” – это не просто введение файла конфигурации, последней строки файла маршрутизации. Macaw::dispatch(); фактически является Фактически выполняет функцию в контроллере Где перед загрузкой файла маршрутизации должны быть выполнены все условия подготовки, такие как инициализация Eloquent и инициализация пакета Composer, который мы будем использовать позже, и т.д.

2. Введение компонента запроса страницы с ошибкой

Мы выбрали FILP/whoops в качестве нашего пакета компонентов для запроса на ошибку.

изменить композитор .json :

"require": {
  "codingbean/macaw": "dev-master",
  "illuminate/database": "*",
  "filp/whoops": "*"
},

Функция обновление композитора А потом bootstrap.php Наконец, добавьте:

// Whoops error prompt
$whoops = new \Whoops\Run;
$whoops->pushHandler(new \Whoops\Handler\PrettyPageHandler);
$whoops->register();

Обновить http://127.0.0.1:81 и вы все равно должны получить эту страницу:

Далее мы добавим конфигурацию маршрутизации Несоответствующий термин Страница ошибок, модификация config/routes.php :

[email protected]');

Macaw::get('fuck', function() {
  Echo "Success! ";
});

Macaw::$error_callback = function() {
  Throw new Exception ("route no match 404 Not Found");
};

Macaw::dispatch();

Теперь перейдите по случайно введенному URL-адресу, например http://127.0.0.1:81/asd, и мы увидим следующий экран:

Есть ли очень знакомое чувство!?

К сожалению, этот пакет предупреждений об ошибках использует Laravel, так что мы милые. MFC Когда фрейм вырос, он стал Laravel Таким, как он выглядит. %% >%

Реализация Загрузчика

После завершения основной подготовки мы официально приступили к изготовлению загрузчика вида.

Загрузчик представлений – это подключаемый компонент. Мы должны разместить все подключаемые компоненты в одном месте. В MFC рекомендуется разместить все подключаемые компоненты в одном месте. MFFC/услуги Далее.

Библиотека базовых компонентов, предоставляемая платформой CI, называется помощники , которую использует Laravel подсветка/поддержка Пакет предоставляет некоторые повторно используемые системные функции. Фактически, “подсветка/поддержка” уже зависит от нашего пакета ORMP “подсветка/база данных”, и теперь его можно использовать непосредственно в среде MFFC. Для получения документации по этому пакету на китайском языке см. http:// laravel -China.org/docs/helpers

Мы не поместили загрузчики представлений в ядро системы, как это было в рамках CI, по двум причинам:

  1. Вызовы на основе пространства имен и автоматическая загрузка экономят больше ресурсов
  2. В эпоху мобильного Интернета и большого интерфейса, который становится все более и более интенсивным, серверная часть становится все более и более основанной на API и json. Во многих случаях нет никакого представления, и нет необходимости увеличивать бесстрашное потребление.

Давайте начнем реализовывать загрузчик представлений.

Заново создайте MFFC/службы Папку и измените composer.json Все классы в этой папке автоматически группируются в корневое пространство имен:

"autoload": {
  "classmap": [
    "app/controllers",
    "app/models",
    "services"
  ]
}

Недавно построенная services/View.php В документе говорится следующее:

view = $view;
  }

  public static function make($viewName = null)
  {
    if ( ! $viewName ) {
      Throw new Invalid ArgumentException ("View name cannot be empty! "";
    } else {

      $viewFilePath = self::getFilePath($viewName);
      if ( is_file($viewFilePath) ) {
        return new View($viewFilePath);
      } else {
        Throw new UnexpectedValueException ("View file does not exist! "";
      }
    }
  }

  public function with($key, $value = null)
  {
    $this->data[$key] = $value;
    return $this;
  }

  private static function getFilePath($viewName)
  {
    $filePath = str_replace('.', '/', $viewName);
    return BASE_PATH.self::VIEW_BASE_PATH.$filePath.'.php';
  }

  public function __call($method, $parameters)
  {
    if (starts_with($method, 'with'))
    {
      return $this->with(snake_case(substr($method, 4)), $parameters[0]);
    }

    Throw new BadMethodCallException ("Method [$method] does not exist! "."
  }
}

Функция composer dump-автозапуск После этого мы можем вызвать этот класс непосредственно в контроллере.

изменить controllers/HomeController.php :

view = View::make('home')->with('article',Article::first())
                                    ->withTitle('MFFC :-D')
                                    ->withFuckMe('OK!');
  }
}

изменить controllers/BaseController.php :

view;
    if ( $view instanceof View ) {
      extract($view->data);
      require $view->view;
    }
  }
}

изменить app/views/home.php :





  
  <?php echo $title ?>


  

  • Fuck Me !

Обновите, вы увидите следующую страницу:

На этом этапе реализация загрузчика представлений завершена.

Позвольте мне изложить основные идеи для проектирования загрузчиков представлений:

  1. Этот класс загрузчика представлений имитирует класс представления Laravel и реализует статический метод make , Принимающий имя представления в качестве параметра для . Как интервал между каталогами.
  2. Метод make static проверяет, пустое ли имя представления, существует ли файл представления, и выдает соответствующее исключение. Вот почему мы ввели пакеты обработки исключений.
  3. Если имя представления допустимо и файл существует, создается экземпляр и возвращается объект класса представления.
  4. Используйте с('ключ', $значение) Или элегантный с ключом($значение) Для вставки переменных в объект представления, который будет вызван в представлении. с Fuck Me (значение$) Змееподобная номенклатура будет преобразована в $fuck_me Для использования в режиме просмотра.
  5. Конечному собранному объекту представления присваивается Домашний контролер Переменные членства $просмотр Эта переменная взята из BaseController Его можно унаследовать от Китая.
  6. Родительский класс Базовый контроллер Деструктивная функция в __destruct() Будет находиться в функции home() Выполнить постобработку для этой переменной-члена: извлечь Показаны переменные, которые будут использоваться в представлении. требуется Просмотреть файл, отправить окончательные результаты расчета в браузер, процесс заканчивается.

Следующий шаг: Используйте Composer для улучшения вашего PHP – фреймворка (2) – Отправка почты