Оригинальная статья была опубликована на моем личном сайте: Улучшение вашего Фреймворк PHP с помощью Composer (1) – Просмотр загрузки
Видишь https://github.com/johnlui/My-First-Framework-based-on-Composer для примера кода для этого урока
обзор
После последней серии учебных пособий “Пошаговое создание собственной PHP-платформы с помощью Composer” мы создали PHP-фреймворк с архитектурой Route 、 MVC и ORM Фундаментальной основой функциональности MFFC . Далее мы продолжим совершенствовать проект.
Давайте использовать его с этого момента. Хуже всего Начало загрузки с видом на место. Мы инкапсулируем класс загрузки представления, который поможет нам загрузить представление и передать переменные в представление. Этот класс покажет только несколько простых интерфейсов, давайте использовать их в контроллере, давайте писать код, смеясь. По-настоящему смейся, смейся. -Д
текст
Дизайн
Задача загрузки класса представления на самом деле проста:
- Найдите файл представления в соответствии с именем представления для поддержки папки
- Удобный и элегантный перенос значений переменных в представление
В этой статье мы не обойдемся без внедрения механизма шаблонов, только для загрузки файлов и передачи переменных.
Базовая подготовка
Нам нужно ввести загрузчики представлений, которые формально открывают двери для компонентизации, поэтому нам нужно провести некоторую подготовительную работу.
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, по двум причинам:
- Вызовы на основе пространства имен и автоматическая загрузка экономят больше ресурсов
- В эпоху мобильного Интернета и большого интерфейса, который становится все более и более интенсивным, серверная часть становится все более и более основанной на 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 :
- Fuck Me !
Обновите, вы увидите следующую страницу:
На этом этапе реализация загрузчика представлений завершена.
Позвольте мне изложить основные идеи для проектирования загрузчиков представлений:
- Этот класс загрузчика представлений имитирует класс представления Laravel и реализует статический метод
make, Принимающий имя представления в качестве параметра для.Как интервал между каталогами. - Метод make static проверяет, пустое ли имя представления, существует ли файл представления, и выдает соответствующее исключение. Вот почему мы ввели пакеты обработки исключений.
- Если имя представления допустимо и файл существует, создается экземпляр и возвращается объект класса представления.
- Используйте
с('ключ', $значение)Или элегантныйс ключом($значение)Для вставки переменных в объект представления, который будет вызван в представлении.с Fuck Me (значение$)Змееподобная номенклатура будет преобразована в$fuck_meДля использования в режиме просмотра. - Конечному собранному объекту представления присваивается
Домашний контролерПеременные членства$просмотрЭта переменная взята изBaseControllerЕго можно унаследовать от Китая. - Родительский класс
Базовый контроллерДеструктивная функция в__destruct()Будет находиться вфункции home()Выполнить постобработку для этой переменной-члена:извлечьПоказаны переменные, которые будут использоваться в представлении.требуетсяПросмотреть файл, отправить окончательные результаты расчета в браузер, процесс заканчивается.