Установка и настройка фреймворка Slim в Ubuntu 14.04

Что такое Slim?

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

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

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

Требования

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

Для выполнения данного руководства нужно установить необходим LAMP stack. Чтобы получить инструкции по установке этой группы программ, читайте руководство «Установка Linux, Apache, MySQL, PHP (LAMP stack) на Ubuntu 12.04».

Если разрабатываемому приложению не нужна СУБД 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

a2enmod rewrite

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

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

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

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

<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>

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

<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>

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

service apache2 restart

Установка Slim

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

  1. загрузка файлов Slim;
  2. распаковка zip-файлов;
  3. копирование 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
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L] index.php
<?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
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'
));      //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

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

<?php
require '/usr/local/HelloSlim/Routes/route1.php';
require '/usr/local/HelloSlim/Routes/route2.php';

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

includes.php

<?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 был развернут согласно инструкциям руководства.

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

Маршрут Тип Действие
/hello GET (static) Отображает статический вид
/hello/NAME GET (dynamic) Отображает динамический вид
/greet POST Отображает вид после запроса POST

Данному проекту требуются следующие файлы в папке приложения (/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 [QSA,L]

2. /var/www/index.php

<?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

<?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

<?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

<small>Copyright notice...</small>
</body>
</html>

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

<!DOCTYPE html>
<html>
<head>
<title>Sample Slim Application</title>
</head<
<body>

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

***
<?php include('header.php'); ?>
***
<h1>Hello <?php echo isset($name)?$name:''; ?></h1>
<!-- The above line handles both the dynamic and the static GET routes that we implemented in the getRoutes.php file.
***
<h2>Send a greeting</h2>
<form method='POST' action='/greet'>
<label>Name</label><br>
<input name='name' placeholder='Who do you want to greet?'><br>
<label>Greeting</label><br>
<input name='greeting' placeholder='Your greeting message'><br>
<input type='submit' value='Greet!'>
</form>
***
<?php include('footer.php'); ?>

8. /usr/local/HelloSlim/Views/greet.php

<?php
include('header.php');
echo "<p>$greeting, $name</p><p><a href='/hello'>First Page</a></p>";
include('footer.php');

9. /usr/local/HelloSlim/routes.php

<?php
include 'Routes/getRoutes.php';
include 'Routes/postRoutes.php';

Теперь можно просмотреть тестовое приложение. Если посетить http://домен.com/, появится простая стартовая страница приложения.

Примечание: если доменного имени у сервера нет, используйте IP-адрес сервера.

Посетив http://домен.com/hello, можно увидеть страницу, отображающую:

Hello

Send a greeting

А также поля для заполнения и кнопку Greet.

Если посетить http://yourdomain.com/hello/World, появится такая же страница, но с хедером:

Hello World

Примечание: если заменить «World» в URL другим словом, содержание страницы изменится соответствующим образом.

Чтобы протестировать POST, введите имя и приветствие в соответствующие поля и нажмите кнопку Greet!.

После нажатия этой кнопки должна появиться первая страница приложения.

Завершающие действия

Теперь, когда на сервере есть полностью настроенный фреймворк Slim, можно приступать к работе над проектом. При возникновении каких-либо затруднений или вопросов обратитесь к полной официальной документации.

Tags: , , , , , , , ,

Добавить комментарий