YAMF (еще одна структура MVC) представляет собой небольшую структуру PHP MVC, предназначенная для того, чтобы вы начали быстро использовать парадигму MVC без большой работы. Все, что вам нужно, - это веб -сервер, который принимает файлы .htaccess , и вы в значительной степени хороши!
Минимальные требования: PHP 7,0+.
Use this template на странице «Репо главной проект».config.php если это необходимо. Отрегулируйте любые параметры, которые вы хотите там, или добавьте новые параметры в $app , такие как логика сеанса. По умолчанию вам не нужно ничего настроить, чтобы поднять ваш сайт.config-private.sample.php в config-private.php и настраивать его в соответствии с вашими потребностями. Например, вы можете настроить $app->db для экземпляра PDO для вашей локальной базы данных. Обратите внимание, что config-private.php будет загружен до того, как произойдет что-либо в config.php .use Yamf/XYZ , вам нужно использовать композитор. Использовать композитор довольно просто: просто перейдите на страницу загрузки и запустите скрипт вверху. (Примечание: если вы находитесь в Windows, вы захотите следовать инструкциям здесь, на вступительной странице.)composer install (если у вас есть файл composer.phar в вашем каталоге, запустите php composer.phar install ). Он будет сидеть и думать на минуту. Их здесь нет, а их не специально! Ямф был целенаправленно записан, чтобы не использовать никаких внешних зависимостей, кроме автозазагрузчика композитора, чтобы снизить барьер въезда на использование парадигмы MVC в PHP. Если вы хотите что -то из этих вещей, просто потяните их со своим любимым менеджером зависимостей (например, композитор). Поскольку композитор уже необходим для запуска этого проекта для автозагрузки PSR-4, мы рекомендуем использовать Composer. vendor/autoload.php уже включен для вас в init.php .
Примечание, касающееся шаблона представления, см. Раздел о подкласке.
Если вы прочитаете следующую документацию на YAMF, вам, вероятно, будет намного лучше, чем просто запрыгнуть и попытаться прочитать код самостоятельно. :) Это займет всего несколько минут, и это того стоит!
Чтобы облегчить простую передачу параметров конфигурации, таких как настройки базы данных и т. Д., YAMF передает переменную $app класса YamfAppConfig для каждой функции контроллера. Вы можете настроить эту переменную для хранения объекта PDO в базе данных, изменить расширение вашего представления или местоположение папки, а также многие другие настройки. Если вы хотите добавить свои собственные значения в $app , вы можете создать класс, который вытекает из YamfAppConfig и изменить настройку appConfigClass в config.php , чтобы указать на свой пользовательский класс. Обратите внимание, что ваш пользовательский класс должен получить от YamfAppConfig ! См. config.php чтобы увидеть все настройки и значения, которые передаются $app . Примечательно, вы можете:
viewsFolderName )viewExtension )defaultHeaderName / defaultFooterName )config-private.php ) $app автоматически доступно в ваших представлениях для вас.
Первое, что вы, вероятно, захотите сделать, это добавить новый маршрут. Для этого следуйте этим шагам:
app/Controllers проекта. Подпапки в порядке. Контроллер на самом деле не должен иметь Controller в имени, но убедитесь, что имя класса соответствует имени файла.public функция, которая принимает два параметра: $app и $request (в этом порядке).routes.php и убедитесь, что вы понимаете документацию и примеры того, как работают маршруты.routes .POST , если это необходимо.Parent-Folder/Controller-Name .yamf/Responses/Response , который может быть чем угодно, от View до ответа JSON, ну, в общем, что бы вы ни хотите, на самом деле. Смотрите следующий раздел для получения дополнительной информации здесь.yamf/Responses/View . Создайте файл PHP (представление) в папке views - опять же, подпапки в порядке - и, в вашем методе контроллера, return new View('name/of/view'); ПолемСуммируя:
app/Controllersroutes.phpviews если это необходимо, при необходимостиreturn new View('name/of/view'); Все методы контроллера, которые называются в результате маршрута, должны возвращать yamf/Responses/Response или подклассы указанного класса. Вот некоторые описания того, как использовать каждый из них. Большинство из них можно использовать в одной линии только с конструктором.
Response - базовый класс для ответа с маршрута.new Response($statusCode = 200)yamf/Responses/Response из этого родительского класса могут вернуть пользовательский код состояния HTTP, если хотите!ErrorMessage - Простая обертка вокруг представления, чтобы отправить код состояния 400 и представление error.php.new ErrorMessage($msg = '', $name = 'error', $title = '', $headerName = '', $footerName = '') . $name - это имя представления.$error . Вы не можете изменить это без подкласса.views/header.php и views/footer.php .JsonResponse - Пример того, как вы можете отправить ответ JSON от вашего контроллераnew JsonResponse($data, $jsonEncodeOptions = 0)$data через echo json_encode($this->data, $this->jsonEncodeOptions);NotFound - используется для возврата 404 не найденного сообщения обратно клиенту.new NotFound($name = '404', $data = [], $title = '', $headerName = '', $footerName = '') . $name - это имя представления.views/header.php и views/footer.php .Response .Redirect - позволяет перенаправить 302 на какую -то другую страницу или маршрутnew Redirect($redirectPath, $isInternalRedirect = true)$isInternalRedirect используется для перенаправления на маршрут в текущем веб -сайте/ routes.php . Если вы хотите перенаправить на внутренний маршрут, используйте Redirect , например: new Redirect('/route/name); (Обратите внимание на начало / ). Если нет, используйте Redirect , например: new Redirect('https://example.com', false); ПолемView -используется для возврата некоторого HTML-представления на основе PHP.new View($name, $data = [], $title = '', $headerName = '', $footerName = '') . $name - это имя представления.compact функцию. Смотрите образец BlogController .views/header.php и views/footer.php . Если у вас есть идеи для большего количества типов Response , которые должны быть включены в YAMF, откройте запрос на функции (через вкладку «Проблемы») или откройте запрос на привлечение!
Две основные переменные отправляются в ваши методы контроллера с маршрута: $app и $request . Обратите внимание, что все выходные данные View будут иметь $app и $request , доступные для использования. Вам не нужно отправлять их в качестве параметра $data .
AppConfig $app $app - это в основном переменные конфигурации, которые вы настраиваете в config.php . Проверьте этот файл для быстрого взгляда на то, что доступно. Некоторые из наиболее важных предметов:
$app->db для подключения к базе данныхnull , чтобы вообще не использовать их. В дополнение к этим, есть две переменные, которые установлены в init.php :
$app->isLocalHost -независимо от того, работает ли приложение на локальном хосте ( 127.0.0.1 или ::1 )$app->basePath -базовый каталог для вашего текущего веб-приложения. Это можно использовать для разрешения вложенных веб -приложений на вашем веб -сервере. Я настоятельно рекомендую использовать эту переменную в ваших views при выполнении локальных ссылок на веб -сайт, чтобы, если вы перемещаете файлы или позже перемещают вещи в подпапку, все не сломается. Чтобы ссылаться на другую страницу на вашем сайте, просто используйте функцию $app->yurl(string) (yamf url), подобная следующей: <?= $app->yurl('/path/to/page') ?> . $request $request будет иметь все ваши данные о вашем маршруте и различных параметрах, которые пришли с вашим запросом. Это тип yamf/Request . У него есть эти публичные члены:
$request->route -raw route string для этого запроса$request->controller -название строки контроллера$request->function -название строки функции контроллера для вызова$request->routeParams -любые параметры в маршруте, такие как {id}. Формат: ['id' => value]$request->get -ey Get Params, найденный в URL-адресе-тот же формат, что и $ _get (не выполнена дополнительная обработка)$request->post -любой Post Params-тот же формат, что и $ _post (не выполнена дополнительная обработка)$request->anchor -если используется, # часть URL (без #). Маршрутизатор достаточно умный, чтобы не соответствовать URL -адресам, таким как /blah/#/foo . Самый простой способ расширить эту структуру - это извлечь из Response (или какого -то другого класса для детей Response ) и/или создать родительский класс для некоторых из ваших контроллеров. Например, выбираясь из View , вы можете изменить выходной выход для использования шаблонного двигателя TWIG вместо простого выхода PHP. Создавая родительский класс для ваших контроллеров, вы можете добавить такие вещи, как проверка или другая дополнительная обработка данных, которые должны произойти для всех ваших маршрутов API, таких как проверка имени пользователя/пароля или токена. Варианты бесконечны, а потенциал отличный!
Есть пример использования веточки вместо необработанного PHP на ветви Twig!
Одна изящная функция, которую поддерживает YAMF, - это статические веб -страницы, которые не требуют route или controller . Если вы хотите /about просто стать простой страницей, добавьте страницу about.php в views/static/ папке и - Bam! - /about работах на вашем сайте. Как насчет подпадок, таких как /blog/post-name ? Это тоже работает! Добавьте файл views/static/blog/post-name.php и он просто работает (TM)! Вы можете использовать это, чтобы по -прежнему иметь красивые URL -адреса на вашем веб -сайте, не беспокоясь о добавлении маршрутов и контроллеров.
Вы можете настроить местоположение статических представлений в config.php .
Обратите внимание, что маршрутизатор пытается соответствовать маршруту router.php , прежде чем проверить статические страницы.
Функцией, которую поддерживает маршрутизатор, который не сразу не включен, является укорочение URL-например, https://example.com/short-url . Это требует подключения к базе данных, но если вы добавите подключение к базе данных и имеете соответствующую таблицу базы данных (схема находится в config.sample.php ), можно использовать укорочение URL, если хотите. Вы не обязаны включать эту функцию.
Я включил некоторую логику сеанса по умолчанию, прокомментированную в config.sample.php . Не стесняйтесь использовать его, изменить или выбросить. Если у вас есть предложения о том, как улучшить эту функциональность, пожалуйста, откройте запрос на привлечение или проблему для получения дальнейшего обсуждения.
Рад, что ты спросил! Всегда есть вещи, которые можно сделать на проекте с открытым исходным кодом: исправить ошибки, новые функции и многое другое! Ознакомьтесь с вкладкой «Проблемы этого репозитория» и посмотрите, какие ошибки сообщались, а какие функции были запрошены. Есть больше информации о внесении вклад в документ.
MIT Лицензия. Пожалуйста, обязательно включите лицензию на эту структуру (вместе со ссылкой GitHub, если вы чувствуете себя щедрым!) При использовании ее на своем сайте. Спасибо! :)
Особая благодарность Bootswatch за тема Bootstrap Paper, используемую в примере.