H Slim framework или как мы отказались от CMS в черновиках Из песочницы. Пишем простую энциклопедию на Slim Framework Slim framework создаем блог

Slim – один из популярнейших открытых микрофреймворков, доступных для PHP. Он очень эффективный, быстрый и простой в использовании. Данный фреймворк идеально подходит для разработки малых и средних веб-приложений, а также позволяет достаточно быстро разрабатывать крупные масштабируемые PHP-приложения.

Slim обладает следующими (достаточно предсказуемыми как для фреймворка) функциями:

  • простота в использовании, мощный и гибкий маршрутизатор;
  • просмотр визуализации шаблонов;
  • безопасные файлы cookie;
  • HTTP-кэширование;
  • простота обработки ошибок и отладки;
  • простота настройки.

Требования

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

Если разрабатываемому приложению не нужна СУБД MySQL, можете не устанавливать ее. Как минимум, понадобятся веб-сервер Apache (с модулем Mod_Rewrite) и PHP 5.3+.

Быстрая установка требований

1: Установка Apache

apt-get update
apt-get install apache2

2: Установка PHP

apt-get install php5 libapache2-mod-php5 php5-mcrypt

3: Активация mod_rewrite

4: Редактирование конфигурационного файла Apache

В конфигурационном файле Apache нужно изменить AllowOverride None на AllowOverride All. В зависимости от настроек сервера этот файл может находиться в:

  • /etc/apache2/apache2.conf
  • /etc/apache2/sites-enabled/000-default
  • /etc/apache2/sites-available/default

В конфигурационном файле найдите раздел, который выглядит следующим образом:



AllowOverride None
Require all granted

Отредактируйте его следующим образом и сохраните изменения:


Options Indexes FollowSymLinks
AllowOverride All
Require all granted

5: Перезапуск Apache

service apache2 restart

Установка Slim

Процесс установки фреймворка Slim состоит из трех этапов:

  • распаковка zip-файлов;
  • копирование Slim Framework в общедоступное место.
  • 1: Загрузка Slim

    Скачать Slim Framework можно при помощи команды:

    wget https://github.com/codeguy/Slim/zipball/master

    Данная команда извлечет архив фреймворка и сохранит его в текущем каталоге под именем master.

    2: Распаковка zip-файла

    Содержимое zip-файла можно извлечь с помощью следующей команды:

    unzip master -d ./

    Примечание : если появилось сообщение о том, что инструмент unzip не установлен, его можно установить с помощью команды apt-get install unzip, а затем снова выполнить предыдущую команду.

    Данная команда извлечет файлы в папку с именем вроде codeguy-Slim-3a2ac72, которая содержит папку по имени Slim, папку фреймворка.

    3: Копирование Slim Framework в общедоступное место

    Теперь нужно скопировать папку codeguy-Slim-3a2ac72/Slim в общедоступное место системы (например, в /usr/local/Slim), откуда фреймворк Slim будет доступен для всех проектов на этом сервере, которым он необходим. Это позволит избежать дублирования и предотвратит любые проблемы обслуживания, которые могут возникнуть из-за дублирования программы.

    Скопируйте папку с помощью следующей команды:

    cp -r ./codeguy-Slim-3a2ac72/Slim /usr/local/Slim

    Примечание : имя извлеченной папки (в данном случае codeguy-Slim-3a2ac72) может несколько отличаться в случае загрузки другой версии фреймворка. Убедитесь, что в команде указано верное имя папки.

    Как только это будет сделано, любой из проектов, использующих Slim Framework, сможет получить доступ к нему.

    Важно! Многие руководства советуют установить фреймворк в общую папку/document root (например, в /var/www/Slim). Имейте в виду: установка файлов инфраструктуры за пределами общей папки/document root (как это сделано в данном руководстве) позволяет немного обезопасить приложение, поскольку файлы фреймворка не будут доступны в браузере.

    Разработка проекта Slim

    Как правило, проект Slim состоит из трех основных каталогов:

    1. Каталог фреймворка Slim.

    Он содержит файлы фреймворка (каталог, который был скопирован в предыдущем разделе).

    1. Каталог проекта.

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

    Данный каталог может находиться в любой точке сервера; единственное условие: в идеале он не должен располагаться в доступном из сети месте. Его можно разместить в /usr/local или домашней папке. К примеру, если проект находится в папке HelloSlim, то такую папку можно поместить в /usr/local/HelloSlim или ~/HelloSlim.

    Файлы в этой папке можно расположить следующим образом:

    HelloSlim
    |- Routes
    | |- route1.php
    | |- route2.php
    |- Models
    | |- model1.php
    | |- model2.php
    |- Views
    | |- footer.php
    | |- header.php
    | |- sidebar.php
    | |- view1.php
    | |- view2.php
    |- Class
    | |- class1.php
    | |- class2.php
    |- routes.php //contains "include" statements for all routes in the "Routes" folder
    |- includes.php //contains "include" statements for all models/classes in the "Models/Class" folders

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

    mkdir /usr/local/HelloSlim
    mkdir /usr/local/HelloSlim/Routes
    mkdir /usr/local/HelloSlim/Models
    mkdir /usr/local/HelloSlim/Views
    mkdir /usr/local/HelloSlim/Class

    Примечание : необязательно использовать именно такую структуру папок; ее можно изменять согласно потребностям проекта или разработчика.

    1. Document root, или общая папка.

    Это папка, доступная в сети (как правило, расположена в /var/www). В ней содержится всего два файла, связанные со Slim:

    • index.php
    • .htaccess

    Данная папка также содержит все скрипты, графические файлы и стили проекта. Во избежание «засорения» папки можно создать в ней отдельные каталоги scripts, styles и images для хранения соответствующих файлов.

    Вот пример структуры папки document root:

    Document Root (eg. /var/www/)
    |- scripts
    | |- jquery.min.js
    | |- custom.js
    |- styles
    | |- style.css
    | |- bootstrap.min.css
    |- images
    | |- logo.png
    | |- banner.jpg
    |- .htaccess
    |- index.php

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

    Предположим, проект имеет структуру, заданную выше; в таком случае нужно заполнить файлы.htaccess и index.php (в document root, root-каталоге сайта) следующим образом:

    .htaccess

    RewriteEngine On


    index.php



    require "$projectDir/includes.php"; //include the file which contains all the project related includes
    $app = new \Slim\Slim(array(
    "templates.path" => "/usr/local/HelloSlim/Views"


    $app->run(); //load the application

    Предполагая, что проект организован в соответствии со структурой папок, определенной в предыдущем разделе, файлы routes.php и includes.php (в каталоге проекта) должны иметь следующее содержание:

    require "/usr/local/HelloSlim/Routes/route1.php";
    require "/usr/local/HelloSlim/Routes/route2.php";

    Примечание : вместо того, чтобы добавлять другие файлы с маршрутами, можно добавить маршруты непосредственно в данный файл. Однако, определение маршрутов в отдельных, логически сгруппированных файлах упростит обслуживание проекта.

    includes.php

    require "/usr/local/HelloSlim/Class/class1.php";
    require "/usr/local/HelloSlim/Class/class2.php";
    require "/usr/local/HelloSlim/Models/model1.php";
    require "/usr/local/HelloSlim/Models/model2.php";

    Образец приложения Slim

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

    • обрабатывает статические маршруты (GET & POST);
    • обрабатывает динамические маршруты;
    • использует виды.

    Примечание : при создании этого образца приложения предполагается, что фреймворк Slim был развернут согласно инструкциям руководства.

    Для начала нужно наметить требования этого примера приложения:

    Данному проекту требуются следующие файлы в папке приложения (/usr/local/HelloSlim/):

    HelloSlim
    |- Routes
    | |- getRoutes.php
    | |- postRoutes.php
    |- Views
    | |- footer.php
    | |- header.php
    | |- hello.php
    | |- greet.php
    |- routes.php

    Ниже показано, как будет работать общая папка.

    Вот пример структуры document root:

    Document Root (eg. /var/www/)
    |- .htaccess
    |- index.php

    Теперь нужно заполнить данные файлы следующим образом:

    1. /var/www/.htaccess

    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php

    2. /var/www/index.php

    require "/usr/local/Slim/Slim.php"; //include the framework in the project
    \Slim\Slim::registerAutoloader(); //register the autoloader
    $projectDir = "/usr/local/HelloSlim"; //define the directory containing the project files
    $app = new \Slim\Slim(array(
    "templates.path" => "/usr/local/HelloSlim/Views"
    )); //instantiate a new Framework Object and define the path to the folder that holds the views for this project
    require "$projectDir/routes.php"; //include the file which contains all the routes/route inclusions
    $app->run(); //load the application

    3. /usr/local/HelloSlim/Routes/getRoutes.php

    $app->get("/", function(){
    echo "This is a simple starting page";
    });
    //The following handles any request to the /hello route
    $app->get("/hello", function() use ($app){
    // the following statement invokes and displays the hello.php View
    $app->render("hello.php");
    });
    //The following handles any dynamic requests to the /hello/NAME routes (like /hello/world)
    $app->get("/hello/:name", function($name) use ($app){
    // the following statement invokes and displays the hello.php View. It also passes the $name variable in an array so that the view can use it.
    $app->render("hello.php", array("name" => $name));
    });

    4. /usr/local/HelloSlim/Routes/postRoutes.php

    //The following handles the POST requests sent to the /greet route
    $app->post("/greet", function() use ($app){
    //The following statement checks if "name" has been POSTed. If it has, it assigns the value to the $name variable. If it hasn"t been set, it assigns a blank string.
    $name = (null !== $app->request->post("name"))?$app->request->post("name"):"";
    //The following statement checks if "greeting" has been POSTed. If it has, it assigns the value to the $greeting variable. If it hasn"t been set, it assigns a blank string.
    $greeting = (null !== $app->request->post("greeting"))?$app->request->post("greeting"):"";
    // the following statement invokes and displays the "greet.php" View. It also passes the $name & $greeting variables in an array so that the view can use them.
    $app->render("greet.php", array(
    "name" => $name,
    "greeting" => $greeting
    ));
    });

    5. /usr/local/HelloSlim/Views/footer.php

    Copyright notice...

    6. /usr/local/HelloSlim/Views/header.php




    Sample Slim Application

    7. /usr/local/HelloSlim/Views/hello.php

    ***

    ***

    Hello