Всем добрый день. Далее будет описан примерный скрипт работы с фраемфорком SLIMPHP с использованием модулей TWIG и PDO.
<?php
set_time_limit( 0 );
ini_set( 'display_errors', 'On' ); // сообщения с ошибками будут показываться
error_reporting( E_ALL ); // E_ALL - отображаем ВСЕ ошибки
/*Данная часть отвечает за работу и правильное отображение ошибок*/
use DI\Container;
use Slim\Factory\AppFactory;
use Slim\Views\Twig;
use Slim\Views\TwigMiddleware;
use core\controllers\SystemUserController as SystemUser;
use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request;
/*Это имена для зоны видимости, без них будут сыпаться ошибки*/
require __DIR__ . '/vendor/autoload.php';
//Каталог от композера, без него работать адекватно не будет
// Объявим контейнер
$container = new Container();// контейнер для шаблоновAppFactory::setContainer($container);
// Добавления контейнера шаблонов в приложение
// Установим контейнер шаблонизатора TWIG
$container->set('view', function() {
return Twig::create('core/views'/*, ['cache' => 'cache']*/);});
// вот тут мы создаем контейнер. если вам нужно. чтобы все быстро менялось отключайте кэш
// Создадим приложение
$app = AppFactory::create();
// Установим стартовую папку
$app->setBasePath('/test');
//Чтобы не было проблем от куда брать ссылки на файлы
// Добавим TWIG в Middleware
$app->add(TwigMiddleware::createFromContainer($app));
$app->addRoutingMiddleware();
// Настройка ошибок
$errorMiddleware = $app->addErrorMiddleware(true, true, true);
$app->addBodyParsingMiddleware();// Подключим роуты
$folders = glob(__DIR__ . "/core/routes/*");
foreach($folders as $folder) {
$files = glob($folder."/*.php");
foreach($files as $file) {
require_once $file;
}
}
$pdo = new \Slim\PDO\Database('mysql:host=127.0.0.1:3306;dbname=675467','45674567','');
$container = $app->getContainer();
/*В данный момент так подключается база данных от slimphp PDO*/
// Render from string
$app->get('/hi/{name}', function ($request, $response, $args) {
$str = $this->get('view')->fetchFromString( '<p>Hi, my name is {{ name }}.</p>', [ 'name' => $args['name'] ]);
$response->getBody()->write($str);
return $response;
});// Пример создания ответа без использования шаблонизатора twig
$app->get('/', function ($request, $response, $args) {
global $pdo; //создаем зону видимости внутри функции
$stt = $pdo->select()->from('user')->where('user','=','Дмитрий')->execute();// делаем запрос в базу данных
$jeux = $stt->fetchAll(0);//Достаем ответ массим массивов //
$result = var_dump($jeux);
$result = $jeux['0'];// выбираем нудевой массив массивов
$result1 = $result["user"];// забираем значение из ассативного массива
return $this->get('view')->render($response, 'index.twig', [ 'title' => 'Главная страница', 'db' => $result1 ]);// Возрашаем шаблон
});
$app->post('/datapost/', function ($request, $response, $args) {
$params = $request->getParsedBody();
$data1 = $params['data1'];
return $this->get('view')->render($response, 'posttest.twig', [ 'data1' => $data1 ]);
});
$app->get('/data/{request_user}', function ($request, $response, $args) {
$arr_data_user = explode("&", $args['request_user']);
return $this->get('view')->render($response, 'data.twig', [ 'title' => 'Главная страница', 'arr_data' => $arr_data_user ]);
});
$app->run();
Ниже пример файла шаблона главной страницы:
<!doctype html>
<html lang="ru">
<head> <meta charset="utf-8" />
<title>{{ title }}</title>
<link rel="stylesheet" href="style.css" />
</head>
<body>
<div id="header">
{{ include('header.twig') }} //Подгружаем шаблон в шаблон
{% block header %} {% endblock %}
</div>
<div id="content"> <h1>Типо главная страница</h1><br/>
<form action="/test/datapost/" method="post">
Значение А: <input type="text" name="data1" value="1">
Значение Б: <input type="text" name="data2" value="2">
<input type="submit" value="Отправить"></form></div>
{% if arr_data != ''%} echo arr_data;{% endif %}// Сюда вставляем ранее отправленные данные
<div id="info pdo">
{{ db }} //Так мы указываем, что нужно вставитьнашу переменную сюда заметьте она без $
</div>
<div id="footer">
{{ include('footer.twig') }} //Импортируем в шаблон шаблон
{% block footer %} {% endblock %} указываем куда вставить
</div>
</body>
</html>