Каркас приложения с минимальным набором популярных библиотек
Некоторые фрейморки такие как Symfony или Laravel, загоняют разработчиков в жесткие рамки, дают меньше свободы чем хотелось бы. Данный каркас может стать отправной точкой для тех кто хочет построить свою архитектуру приложения.
Я провел значительное время, выбирая пакеты, отдавая предпочтение тем, которые используются в существующих больших приложениях или фреймворках. Вот что я выделил:
nikic/fast-route Популярная библиотека маршрутизации Slim.
filp/whoops Впечатляюще потрясающий обработчик ошибок.
symfony/http-foundation Обработка запросов и возврата ответа.
league/container Популярная библиотека для инъекции зависимостей
twig/twig Надежный шаблонизатор.
vlucas/phpdotenv Используем локальные переменные вне хранилища
propel/propel Propel2 мощная и шустрая ОРМ.
maximebf/debugbar Панель отладки, интеграция с Propel2 и Monolog.
fzaninotto/faker Генератор тестовых данных с интеграцией с Propel2.
monolog/monolog Библиотека логирования с поддержкой различных хранилищ.
I've included a Vagrantfile which should make getting setup extremely simple. I assume composer is installed.
Step 1. Install Vagrant
Step 2. Clone this repository
Step 3. cd into the repository
Step 3. composer install
Step 4. cp .env.example .env
Step 5. vagrant up
From here, you should be able to browse to http://localhost:8080/. The website is served with NGINX and PHP 7.
I've intentionally made this project as simplistic as possible. A lot of things are left up to you to design and implement. On the plus side, you won't have to remove much boilerplate.
Below you will find instructions on how to implement a few things, feel free to contribute more examples :).
Edit bootstrap/app.php
and add the following:
$container->add('PDO')
->withArgument(getenv('DB_CONN'))
->withArgument(getenv('DB_USER'))
->withArgument(getenv('DB_PASS'));
You will also need to add some values to your .env
# Database access
MODE=dev
DB_HOST=localhost:3306
DB_NAME=frameworkless
DB_USER=fwl_user
DB_PASS=hopefullysecure
Now, from a controller:
private $pdo;
public function __construct(PDO $pdo)
{
$this->pdo = $pdo;
}
public function get()
{
$handle = $this->pdo->prepare('SELECT * FROM `todos`');
$handle->execute();
return new JsonResponse($handle->fetchAll(PDO::FETCH_ASSOC));
}
You will also need to add some values to your .env
# Database access
DB_CONN=mysql:host=127.0.0.1;dbname=frameworkless;charset=utf8
DB_USER=fwl_user
DB_PASS=hopefullysecure
###Propel2 (ORM)
Step 1. $ export cat .env
Step 2. $ app/command install