
MVPHP - это простая, легко взломанная структура для разработки минимально жизнеспособных веб -приложений PHP. Многие рамки PHP имеют крутой кривую обучения и глубоко абстрагировали свою функциональность. MVPHP предназначен для того, чтобы сделать вещи простыми, легкими и ближе к чистому PHP. Он также предоставляет простую и настраиваемую реализацию Bootstrap для начала создания передней части без особых хлопот.
Что включает в себя:
Что это не так:
MVPHP не является надежной и хорошо проверенной PHP-структурой, такой как Laravel, Symfony, Zend и т. Д. Эта структура предназначена для быстрого развития веб-приложений PHP с концепцией с минимальными накладными расходом, небольшим количеством мнений и большой гибкости. Используйте его на свой собственный риск! Пожалуйста, создайте проблему, если вы столкнетесь с ошибкой или у вас есть какие -либо предложения.
composer install в корне проекта.npm install -g gulp-cli для глобального установки CLI Gulpnpm install в root Project, чтобы установить инструменты, которые нам нужно для создания фронтальных файлов.gulp , чтобы построить фронтальные файлы.public каталог.Основная идея, стоящая за этой структурой, состоит в том, чтобы начать с одного простого класса, который будет обрабатывать всю основную функциональность.
app.php - это файл Bootstrap, который сначала загружает наши настройки config.php , а затем создает создание нашего основного класса, создавая объект $app . Объект $auth также создается для всех функциональности, связанных с аутентификацией. Мы указываем на свойство нашего основного объекта ( $app->auth ) для ссылки на $auth , чтобы сделать все простыми и сделать его доступным в рамках $app .
$ app = new MVPHP (); Почти все, что мы делаем, будет использовать этот объект $app .
app.php также требует файла routes.php в корневом каталоге, где мы определим наши начальные маршруты. Вы увидите несколько рабочих примеров в этом файле.
Есть несколько способов определить маршрут и что он должен делать:
$ app -> route ( ' /example ' , function () use ( $ app ) {
// Do stuff here
}); Закрытие - это анонимная функция, которая будет работать, когда URI запроса соответствует маршруту. Чтобы методы в нашем основном классе MVPHP были доступны внутри этой анонимной функции, мы указываем use ($app) . Это импортирует переменную $app в сферу переменной анонимной функции.
$ app -> route ( ' /example/{id} ' , function ( $ params ) use ( $ app ) {
echo $ params [ ' id ' ];
});Вы можете указать переменные параметры в URI с кронштейнами. Они идентифицированы в ассоциативном массиве с ключом, представляющим имя, определенное в маршруте, и значение является фактическим значением, указанным в URI запроса.
$ app -> route ( ' /example/{id:int} ' , function ( $ params ) use ( $ app ) {
echo $ params [ ' id ' ];
});Вы также можете определить ограничения для сопоставления параметров URI с помощью толстой кишки, за которым следует тип ограничения. Отказ от значения ограничения по умолчанию не будет ограничением «строки».
Параметры ограничения:
Примеры регулярного выражения:
Любое выражение, которое работает с функцией PHP preg_match , будет работать здесь. Этот инструмент полезен для проверки выражений, прежде чем вы их реализуете.
// This example requires the ID value to be a 5 digit number
$ app -> route ( ' /example/{id:regex=^[0-9]{5}$} ' , function ( $ params ) use ( $ app ) {
echo $ params [ ' id ' ];
});
// This example requires the ID to be lower or uppercase letters between 1-10 characters long
$ app -> route ( ' /example/{id:regex=^[a-zA-Z]{1,10}$} ' , function ( $ params ) use ( $ app ) {
echo $ params [ ' id ' ];
}); $ app -> route ( ' /example ' ); Иногда в вашем приложении будет много маршрутов, и вы предпочитаете организовать их в отдельные файлы, чем их все в файле routes.php .
Если вы зарегистрирует такой маршрут, MVPHP будет искать коррелированный файл с тем же именем в каталоге controllers . В приведенном выше примере маршрут, зарегистрированный для /example будет искать файл example.php в каталоге контроллеров и требует его.
Теперь вы можете зарегистрировать больше маршрутов, связанных с /example конечных точек в файле example.php . Например, ваш файл controllers/example.php может выглядеть следующим образом:
// Reiterate this route and do something with it this time
$ app -> route ( ' /example ' , function () use ( $ app ) {
// Do stuff
});
// Register any other related route endpoints here
$ app -> route ( ' /example/stuff ' , function () use ( $ app ) {
// Do stuff
});Если вы хотите использовать определенный файл с другим именем, просто укажите его как второй параметр:
$ app -> route ( ' /example ' , ' myfile ' ); Это постарается требовать controllers/myfile.php .
Концепция маршрутов, контроллеров и моделей очень свободно определена в этой структуре. Мы избегаем использования куча разных классов ради простоты. Контекст -контроллер в контексте этой структуры должен быть просто местом для опосредования между запросами и функциональностью, определяющей модель.
Посмотрите на файлы в каталоге controllers для примеров.
Мы можем проверить различные методы запроса с помощью метода action :
$ app -> route ( ' /example ' , function () use ( $ app ){
if ( $ app -> action ( ' post ' ) ) {
// Do stuff on POST
} elseif ( $ app -> action ( ' get ' ) ) {
// Do stuff on GET
}
}); Шаблоны представления хранятся в каталоге views . Мы можем назвать представление (обычно из контроллера), как это:
$ app -> view ( ' my-template ' ); Это просто ищет my-template.php в папке Views и требует файла. Если у нас есть переменные в файле шаблона, мы должны передать их в метод просмотра, как это:
$ my_var1 = ' Stuff I want to echo in the template. ' ;
$ app -> view ( ' my-template ' , [
' my_var1 ' => $ my_var1
]); Теперь $my_var1 будет доступен внутри файла шаблона представления.
Мы не беспокоимся о шаблонном двигателе (потому что PHP по своей сути является языком шаблона). Просто получить доступ к вариациям в вашем HTML, как это:
< p > < ?=$my_var1;? > </ p >Условные заявления:
< ?php if ( isset($my_var1) ):? >
< p > < ?=$my_var1;? > </ p >
< ?php endif;? >Вы понимаете идею. Чистое и простое шаблон PHP.
По умолчанию передняя часть использует начальную загрузку. Вы можете найти все исходные файлы в каталоге frontend . Инструкции по созданию исходных файлов из папки frontend определены в файле gulpfile.js в корне проекта.
Когда вы впервые запускаете gulp в корне проекта, файлы SCSS и JavaScript были объединены, занижены, скопированы в public папку. Файлы поставщика JS и CSS, которые мы используем (jQuery, Bootstrap и т. Д.) Также копируются в public папку.
Перед редактированием файлов SCSS и JavaScript в каталоге frontend вы можете запустить gulp watch в корне проекта. Gulp будет следить за любыми изменениями, которые вы сохраняете в файлах и сохраняете их по ходу дела.
Класс models/Documents.php предоставляет один метод для написания файла PDF из HTML -источника. Этот класс использует wkhtmltopdf и может потребовать, чтобы вы установили эти зависимости, прежде чем он будет работать:
sudo apt-get install xfonts-base xfonts-75dpi urw-fonts
В будущем будет добавлено больше PDF и других функциональности, связанных с «документами».
Погрузитесь глубже в другие доступные методы утилиты, посмотрев на файл models/MVPHP.php , который содержит наш основной класс. Больше будет добавлено в будущем!