Фреймворк slim создание сайта

Обновлено: 06.07.2024

Как гласит официальный сайт:

И это действительно так, вы можете скачать его вручную архивом или воспользоваться Composer. После этого создайте index.php со следующим содержанием:


Это простое приложение которое выводит привет > при переходе на url.
Но как же мы были разочарованы, что на этом большинство статей в интернете заканчивается и на данном этапе многое остается для нас непонятным.

Сам Slim не задает чёткой системы распределений файлов на диске, поэтому мы не нашли лучшего способа, чем иклюдить каждый роутинг. На следующий день, поняв, что что-то идёт не так, было решено создать отдельную папку и класть туда файлы по группам. В файл index.php добавилось следующее


Со временем каждый такой файл стал слишком большим, но посмотрев официальную документацию, ничего не обнаружили. Решение было найдено на github, где было сказано, что надо делать:

Не лишним будет проводить проверку на доступность не в самом контроллере, а на уровне роутига, благодаря «Middleware». Например, для панели администратора сразу же можно поставить на целую группу такую как:


Где вторым аргументом является присвоенная анонимная функция переменной. В моём случае она выглядит таким образом:


К сожалению, а для некоторых, может, и к счастью, в slim нет встроенной работы с базой данных, но этот вопрос достаточно просто решается, когда мы создаём объект App. Мы можем передавать некоторые аргументы, которые будут им использоваться.


После этого мы сможем спокойно воспользоваться Dependency Injection для работы с базой данных, обращаясь к параметрам, переданным при создании с помощью метода $app-config('Имя');


Все остальные возможности Slim достаточно хорошо описаны в документации. В заключении хочу сказать, что для нашей команды, которая никогда раньше не работала с различными framrwork'ами, это был хороший опыт, который мы уже используем в проектах. Возвращаться на какую-либо CMS желания не возникает.

25 апреля 2019 года свет увидела новая мажорная alpha -версия микрофреймворка Slim, а 18 мая она выросла до beta . Предлагаю по этому поводу ознакомиться с новой версией.

  • О новшествах фреймворка
  • Написание простого приложения на Slim-4
  • О дружбе Slim и PhpStorm

Новое в Slim 4

Основные нововведения по сравнению с версией 3:

Как теперь создать приложение?

В третьей версии создание приложения выглядело примерно так:

Теперь конструктор приложения принимает следующие параметры:

Так же теперь можно воспользоваться статическим методом create фабрики приложения \Slim\Factory\AppFactory .
Этот метод принимает на вход такие же параметры, только все они опциональные.

Верните мне 404 ошибку!

Если мы попробуем открыть несуществующую страницу, получим код ответа 500 , а не 404 . Чтобы ошибки обрабатывались корректно, нужно подключить \Slim\Middleware\ErrorMiddleware

Middleware

Сигнатура ($request, $response, $next) больше не поддерживается

Как жить без настроек?

Без настроек жить можно. Предоставленные инструменты нам в этом помогут.

Сейчас эти функции можно возложить на эмиттер ответа.

Подключаем к приложению

outputBuffering

Данная настройка позволяла включать/выключать буфферизацию вывода. Значения настройки:

  • false — буфферизация выключена (все вызовы операторов echo , print игнорируются).
  • 'append' — все вызовы операторов echo , print добавляются после тела ответа
  • 'prepend' — все вызовы операторов echo , print добавляются перед телом ответа

Разработчики фреймворка предлагают заменить эту опцию промежуточным ПО \Slim\Middleware\OutputBufferingMiddleware , в конструктор которого передается PSR-17 совместимая фабрика потока и режим, который может быть равен append или prepend

determineRouteBeforeAppMiddleware

Эта настройка позволяла получить текущий маршрут из объекта запроса в промежуточном ПО

На замену предоставляется \Slim\Middleware\RoutingMiddleware

displayErrorDetails

Настройка позволяла выводить подробности ошибок. При отладке это неплохо упрощает жизнь.

Помните \Slim\Middleware\ErrorMiddleware ? Оно и здесь нас выручит!

addContentLengthHeader

Данная настройка позволяла включать/отключать автодобавление заголовка Content-Length со значением объема данных в теле ответа

Заменяет опцию промежуточное ПО \Slim\Middleware\ContentLengthMiddleware

routerCacheFile

Теперь вы можете напрямую установить файл кеша роутера

Создание приложения на Slim-4

Чтобы более подробно рассмотреть фреймворк, напишем небольшое приложение.

Приложение будет иметь следующие роуты:

  • /hello/ — страница приветствия;
  • / — редирект на страницу /hello/world
  • Остальные роуты будут возвращать кастомизированную страницу с 404 ошибкой.

Логика будет в контроллерах, рендерить страницу будем через шаблонизатор Twig
Бонусом добавим консольное приложение на базе компонента Symfony Console с командой, отображающей список роутов

Шаг 0. Установка зависимостей

В качестве контенера зависимостей я выбрал ultra-lite/container, как легкий, лаконичный и соответствующий стандарту.
PSR-7 и PSR-17 разработчики Slim предоставляют в одном пакете slim/psr7. Им и воспользуемся

Предполагается, что пакетный менеджер Composer уже установлен.

Создаём папку под проект (в качестве примера будет использоваться /path/to/project ) и переходим в неё.

Добавим в проект файл composer.json со следующим содержимым:

и выполним команду

Теперь у нас есть все необходимые пакеты и настроен автозагрузчик классов.

Если работаем с git, добавим файл .gitignore и внесем туда директорию vendor (и диреткорию своей IDE при необходимости)

Я использую IDE PhpStorm и горжусь этим . Для комфортной разработки самое время подружить контейнер и IDE.
В корне проекта создадим файл .phpstorm.meta.php и напишем там такой код:

Этот код подскажет IDE, что у объекта, реализующего интерфейс \Psr\Container\ContainerInterface , метод get() вернёт объект класса или реализацию интерфейса, имя которого передано в параметре.

Шаг 1. Каркас приложения

  • app — код приложения. К нему мы подключим наше пространство имен для автозагрузчика классов;
  • bin — директория для консольной утилиты;
  • config — здесь будут файлы конфигурации приложения;
  • public — директория, открытая в веб (точка входа приложения, стили, js, картинки и т.д.);
  • template — директория шаблонов;
  • var — директория для различных файлов. Логи, кэш, локальное хранилище и т.д.
  • config/app.ini — основной конфиг приложения;
  • config/app.local.ini — конфиг для окружения local ;
  • app/Support/CommandMap.php — маппинг команд консольного приложения для ленивой загрузки.
  • app/Support/Config.php — Класс конфигурации (Чтобы IDE знала, какие конфиги у нас имеются).
  • app/Support/NotFoundHandler.php — Класс обработчика 404й ошибки.
  • app/Support/ServiceProviderInterface.php — Интерфейс сервис-провайдера.
  • app/Provider/AppProvider.php — Основной провайдер приложения.
  • bootstrap.php — сборка контейнера;
  • bin/console — точка входа консольного приложения;
  • public/index.php — точка входа веб приложения.

Ах да, ещё неплохо исключить конфиги окружения из репозитория. Ведь там могут быть явки/пароли. Кэш тоже исключим.

Теперь можно научить PhpStorm понимать, какие у конфига есть ключи и какого они типа

Мы вынесли роутинг в контейнер для того, чтобы можно было с ним работать без инициализации объекта \Slim\App .

Желательно дать этому файлу права на выполнение

Проверка.
Запустим консольное приложение:

В ответ должно отобразиться окно приветсвия компонета symfony/console с двумя доступными командами — help и list .

Теперь запустим веб-сервер.

И откроем любой урл на localhost:8080.
Все запросы должны возвращать ответ с кодом 404 и пустым телом.
Это происходит, потому что у нас не указан ни один маршрут.

Нам осталось подключить рендер, написать шаблоны, контроллеры и задать маршруты.

Шаг 2. Рендер

Добавим шаблон template/layout.twig . Это базовый шаблон для всех страниц

Добавим шаблон страницы приветствия template/hello.twig

И шаблон страницы ошибки template/err404.twig

Добавим провайдер рендеринга app/Provider/RenderProvider.php

Включим провайдер в бутстрап

Добавим рендер в обработчик 404 ошибки

Теперь наша 404 ошибка приобрела тело.

Шаг 3. Контроллеры

Теперь можно браться за контроллеры
У нас их будет 2:

  • app/Controller/HomeController.php — главная страница
  • app/Controller/HelloController.php — страница приветствия

Контроллеру главной страницы из зависимостей необходим роутер (для построения URL редиректа), а контроллеру страницы приветствия — рендер (для рендегинга html)

Добавим провайдер, регистрирующий контроллеры

Не забудем добавить провайдер в бутстрап

Мы можем запустить веб-сервер (если останавливали).

Шаг 4. Консольная команда

Напишем команду route:list

Теперь нужен провайдер, который зарегистрирует команду в контейнере и добавит её в маппинг


В этой статье мы узнаем, как создать движок блогов для плоских файлов на PHP с помощью фреймворка Slim . Если вы не понимаете жаргон, не волнуйтесь. Мы просто собираемся создать приложение для спартанского блога, которое использует текстовые файлы вместо базы данных для хранения данных.

Если вы новичок, не волнуйтесь! Начнем с основ использования Slim . Давайте начнем после прыжка!

Вступление

Шаг 1: Начало работы

Для начала давайте настроим приложение hello world. Перед этим вам необходимо загрузить Slim Framework в вашу систему. Мы не будем много говорить о Slim, так как он уже освещался здесь, на Nettuts +. В идеале в вашей папке должны быть следующие файлы:

Теперь откройте index.php , где вы увидите кучу HTML внутри следующего раздела. Я удалил все это и заменил на «Hello world». Вы, надеюсь, index.php теперь должны выглядеть так.

Я создал Virtualhost на своем компьютере, URL которого показан на скриншоте. Настройте URL в зависимости от расположения Slim на вашем компьютере.

Перейдите по URL-адресу, и вы увидите домашнюю страницу с текстом «Hello world».


Шаг 2. Визуализация страницы PHP

Следующим шагом является рендеринг файла PHP. Прежде чем мы продолжим, создайте каталог с именем templates для хранения всех наших файлов шаблонов. Все созданные нами статические файлы HTML или шаблоны будут помещены в эту папку. Slim позволяет нам указать путь к нашим файлам шаблона в его конфигурации. Мы можем добавить конфигурацию, как показано ниже.

Давайте создадим страницу о нашем блоге. Создайте файл PHP с именем about.php и поместите его в папку templates . Добавьте следующий код к нему:

This page is an example of static route, rendering a php file.

Чтобы Slim обрабатывал запрос, нам нужно определить соответствующий Route который может быть сопоставлен с этим URL. На нашем первом шаге мы добавили маршрут к index или «/». Теперь давайте добавим еще один маршрут для нашей страницы о.


Мы добавили маршрут к странице about, которая будет отображать about.php расположенный по адресу ./templates (помните переменную ./templates ?). Вы заметили, что мы использовали use ($app) внутри метода get ? Ну, это просто способ использовать переменную внутри анонимной функции, которая находится за пределами ее области видимости.

Шаг 3: Присвоить значения шаблону

Теперь мы можем отобразить страницу шаблона для маршрута. Пришло время подумать об отображении некоторых динамических значений в шаблоне, так как мы не можем постоянно рендерить и обслуживать статические файлы. Мы можем назначить значения для отображения в шаблоне из метода render() . Он должен быть передан в качестве второго параметра в виде ассоциативного массива. Давайте изменим приведенный выше код, чтобы он выглядел так:

И немного измените тело шаблона.

Вы заметите, что можете увидеть ту же страницу, если перезагрузите предыдущий URL. Переменные, используемые в файле шаблона, являются соответствующими ключами в ассоциативном массиве.

Шаг 4: Добавить динамический маршрут

Чтобы сделать параметр маршрута необязательным, перепишите вышеуказанный код, как показано ниже:

При этом второй и третий параметры являются необязательными. Мы можем использовать метод func_get_args() для получения всех аргументов, которые передаются в функцию обратного вызова.

Хорошо, пришло время заняться каким-то серьезным делом. Теперь у нас есть вся необходимая информация для создания блогового движка блогов. Давайте соединим вышеупомянутые знания вместе, чтобы создать их.

Шаг 6: Создайте файловую систему

Нам нужно создать файловую систему, прежде чем мы объединим все эти разные компоненты. Вот простая файловая система для нашего приложения.


Это минималистичная файловая система с только необходимыми файлами / папками. Все статьи будут храниться в папке articles . В папке assets будут храниться наши файлы CSS и JavaScript, а также изображения. Slim будет содержать рамки и файлы шаблонов.

Шаг 7: Добавьте маршрут для просмотра статьи

Если вы чувствуете себя немного растерянным, вот быстрый взгляд на структуру нашего приложения.

  • Статья будет написана в текстовом файле с URL-адресом в качестве имени файла.
  • Наше приложение будет сопоставлять URL-адреса с соответствующими статьями.
  • Для нашего удобства мы будем хранить метаинформацию (например, имя автора, дату и т. Д.) Статьи в текстовом файле в формате JSON. Это поможет нам получить их, используя встроенную в json_decode() функцию json_decode() . Содержание и метаданные будут разделены пустой строкой.

Давайте добавим маршрут, который будет загружать статью из папки статей на основе URL.

Мы добавили динамический маршрут с одним параметром маршрута. Функция обратного вызова получит значение для этого параметра, которое должно быть именем файла без его расширения. Затем мы извлекаем значение переменной конфигурации article.path , где мы храним наши статьи.

Создайте файл шаблона для визуализации статьи и поместите его в папку template .

Давайте создадим наш первый пост в блоге сейчас. Создайте новый файл с именем first-article.txt , поместите его в папку articles и добавьте содержимое, как показано ниже. Убедитесь, что у вас есть метаданные и контент, разделенные пустой строкой.


Отлично! Вы можете начать публикацию статей сейчас. Но ждать! У нас еще нет страницы со списком. Нам нужно перечислить все статьи, доступные в нашей системе, с ее названием и небольшим описанием. Чтобы сделать это, нам нужно будет проанализировать папку статей, чтобы найти все статьи и добавить их в массив, читая их одну за другой.

Шаг 8: Создайте страницу со списком

Здесь мы добавили маршрут к домашней странице. Мы используем встроенный в PHP класс Directoryiterator для обхода каждого файла в каталоге. Каждая статья добавляется в массив $articles Articles. Из файла шаблона ( index.php ) мы можем просмотреть эти статьи, как показано ниже.

Наша домашняя страница готова сейчас. Он перечислит все статьи в нашем блоге с соответствующим заголовком и частью контента.


Шаг 9: Создайте страницу архивов

  • / архивы
  • / Архив / гггг
  • / Архивы / гггг / мм
  • / Дд архивы / гггг / мм /

Для этого мы загрузим все статьи и отфильтруем их по аргументам, переданным в функцию обратного вызова. Я переместил все в класс, чтобы мы могли снова использовать наш код. Маршрут, который будет поддерживать вышеуказанные URL, будет выглядеть примерно так:

// assign $this to another variable as it is not supported inside closure

Обратите внимание, что на этом маршруте год, месяц и дата являются необязательными параметрами. /archives является единственной обязательной частью URL. Далее нам нужно реализовать этот маршрут, который будет отвечать на основе необязательных параметров.

Мы можем написать условия для маршрута, которые должны быть удовлетворены аргументами, чтобы проверить год, месяц и дату, переданные маршруту.

Здесь год должен начинаться с 19 или 20, за которыми следуют любые две цифры. Месяц должен быть между 1 и 12, а дата должна быть между 01 и 31.

Вот страница архивов, которую я создал с помощью приведенного выше кода. Если вы заметили, что я использовал Twitter Bootstrap для применения некоторых основных стилей, вы получите дополнительный cookie!


Шаг 9: оживить

Итак, теперь у нас есть рабочая модель блогового движка с плоскими файлами. Следующее, что нам нужно сделать, это организовать приложение, чтобы избежать дублирования кода и добавить такие функции, как комментирование и так далее. Давайте переместим этот код из index.php в отдельный класс для лучшей организации.

До сих пор мы использовали класс View платформы Slim. Мы можем создать собственный класс представления, который расширит Slim_View для добавления некоторых дополнительных функций, таких как настройка базового макета, глобальные настройки и т. Д. Если вы предпочитаете писать статьи в Markdown, вы также можете включить анализатор Markdown.

Мы также должны обратить внимание на улучшение эстетики приложения. Я предпочитаю использовать загрузчик Twitter, поскольку его очень легко использовать и настраивать. Я не думаю, что это хорошая идея, чтобы копаться в этих деталях здесь. Я собрал их в простое приложение под названием TextPress, которое можно скачать здесь .

Завершение

Так вот и все. Дайте мне знать, если у вас есть какие-либо вопросы в комментариях ниже, и большое спасибо за чтение!

Использование Slim PHP Framework

В этой статье мы обсудим, что такое микрофреймворк Slim Framework и где он может быть полезен.

Для чего он нужен?

Slim Framework - это идеальный инструмент для создания API, которые используют, переиспользуют какие-либо данные или же предоставляют к ним доступ. Также это прекрасный инструмент для быстрого прототипирования, когда задумка требует скорейшей реализации. Кроме того, с помощью микрофреймворка Slim можно создавать полнофункциональные web-приложения с пользовательским интерфейсом. Он очень быстрый, имеет небольшую кодовую базу - только то, что нужно и больше ничего.

Как запустить?

Запрос и ответ

Работа с внешними компонентами

PHP микрофреймворк Slim специально спроектирован таким образом, чтобы максимально упростить взаимодействие со сторонними компонентами. С помощью компонентов сторонних разработчиков можно расширить функционал приложения. Эти компоненты могут быть найдены, в частности, в широко известном репозитории PHP пакетов - Packagist.

Установка

Для работы с Slim Framework необходимо иметь PHP 5.5 и новее, а также нужно иметь настроенные правила конфигурации сервера, для перенаправления всех запросов на index.php. Установку будем выполнять с помощью пакетного менеджера Composer. Если вы не знаете, что такое пакетный менеджер Composer, то на сайте есть статья о нем. Далее необходимо создать папку, например, MyProject.

Открываем консоль команд и вводим следующее:

$ cd путь-к-папке/MyProject
$ composer require slim/slim "^3.0"

Последняя команда установит сам фреймворк и все его зависимости. После этого в папке MyProject необходимо создать папку public, которая будет являться корневой директорией нашего сайта доступной извне, там же надо создать два файла: index.php и .htaccess, последний файл конфигурации Apache нужен для перенаправления всех запросов к index.php.

Содержимое файла .htaccess:

RewriteRule ^ index.php [QSA,L]

А вот непосредственно код нашего приложения:

// передаем массив настроек в конструктор класса Slim\App
$app = new \Slim\App($config);

// Запускаем приложение
$app->run();

Поясню код выше. С помощью директив use мы импортируем необходимые нам классы из стандарта PSR 7 о котором я говорил выше. Затем включаем в наш index.php файл автозагрузки классов. Такой порядок может показаться несколько необычным, однако он легален с точки зрения языка. После этого создаем массив строк представляющих собой настройки нашего web-приложения. И, наконец, добавляем маршруты с помощью метода get класса Slim\App. Запускаем встроенный в PHP web-сервер с помощью следующих команд:

$ php -S localhost:9090 -t public public/index.php

Открываем браузер по адресу localhost:9090 и смотрим.

Таким образом сегодня мы с Вами познакомились с PHP микрофреймворком Slim Framework. Узнали в каких случаях его можно и стоит использовать. Создали тестовое приложение. Спасибо за внимание.


Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

Она выглядит вот так:

Комментарии ( 1 ):

Читайте также: