Статьи

Прощай, CodeIgniter, Привет Ларавел

Многие разработчики PHP являются фанатами своего PHP-фреймворка, и есть немало из них, которые вы можете выбрать. Среди наиболее популярных из них — CodeIgniter, Zend Framework, CakePHP, Symfony, Yii, а также новые ребята из блоков Silex, Slim, Lithium и Laravel.

В начале своей карьеры я наткнулся на CodeIgniter, и я люблю его за его простоту, небольшие размеры и хорошую документацию. Для меня это отлично работало, когда я разрабатывал приложения для малого и среднего размера (обычно это приложения для Facebook), и кривая обучения для новых разработчиков, которые работали со мной, была достаточно поверхностной, чтобы их можно было легко интегрировать в процесс разработки.

Но в прошлом году, из-за того, что кто-то из сообщества PHP, сообщения в блогах и предложения некоторых друзей были в Твиттере, я попробовал Laravel 3 — и с тех пор я никогда не оглядывался назад. Итак, в этой статье я хотел бы представить сравнение двух структур с моей точки зрения.

Требования

CodeIgniter 2.1.3 требуется PHP 5.1.6, но версии до 2 по-прежнему работали с PHP 4. Это было затруднительно, поскольку все переходили на использование PHP 5. Laravel 3 требуется PHP 5.3, а также расширение Mcrypt.

CodeIgniter 1 не нуждался в Mcrypt, поскольку, если у вас не установлено расширение, оно будет использовать пользовательские функции для кодирования / декодирования строк. Конечно, это замедляет работу приложения, и мы были поражены некоторыми производственными серверами, на которых оно не было установлено.

<?php
function encode($string, $key = '') {
    $key = $this->get_key($key);
    if ($this->_mcrypt_exists === true) {
        $enc = $this->mcrypt_encode($string, $key);
    }
    else {
        $enc = $this>_xor_encode($string, $key);
    }
    return base64_encode($enc);
}

ОСТАЛЬНЫЕ

Легко построить REST API с помощью Laravel с использованием контроллеров RESTful, в котором просто установлено свойство $restful Например, если вы создаете API для диспетчера задач, для обновления задачи он будет использовать что-то вроде этого:

 <?php
class Tasks_Controller extends Base_Controller {
    public $restful = true;
    public function get_index()
    {
    }
    public function put_update()
    {
    }
...
}

Для обработки PUT в CodeIgniter вам понадобится этот обходной путь:

 <?php
if ($_SERVER["REQUEST_METHOD"] == "PUT") {
    parse_str(file_get_contents("php://input"), $post_vars);
    $arData = json_decode(array_pop(array_keys($post_vars)));
}

Как видите, это подвержено ошибкам и не очень чисто.

Код организации

В большинстве случаев проект, над которым вы работаете, будет иметь внешний и внутренний интерфейсы. Чтобы лучше организовать код в CodeIgniter, лучшим подходом является использование HMVC . Таким образом, у вас будут отдельные каталоги для внутреннего кода и внешнего кода, чтобы разные разработчики могли работать независимо друг от друга. Чтобы добиться чего-то похожего с Laravel, вы можете использовать вложенные контроллеры .

Вид

CodeIgniter не имеет движка шаблонов по умолчанию, но вы можете легко интегрировать его, например, Smarty . С другой стороны, Laravel использует Blade в качестве шаблонного движка, который очень простой, но мощный. С Blade очень легко настроить двухступенчатый просмотр .

У вас есть главный шаблон, в который вы обычно помещаете базовую структуру HTML с заголовком, навигацией, нижним колонтитулом и т. Д. В большинстве случаев этот шаблон называется layout.blade.phpmaster.blade.php Часть кода, которая будет внедрена с разных контроллеров, объявляется в мастер-шаблоне @yield('content')

 <!DOCTYPE HTML>
<html>
 <head>
  ...
 </head>
 <body>
  <div class="header">
   ...
  </div>
  @yield('content')
 </body>
</html>

В пользовательских шаблонах, объявленных для каждого метода контроллера, например на странице CMS, такой как «О нас», у вас есть шаблон с именем page.blade.php

 @layout('master')
...
@section('content')
About page section
@endsection
...

Вы можете иметь столько разделов, сколько хотите объявить и использовать повторно.

Более подробное объяснение этого можно найти в разделе « Макеты лезвий» в онлайновой книге с открытым исходным кодом под названием Code Happy by Dayle Rees.

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

Модель

Codeigniter использует Active Record для работы с базой данных, которую довольно легко освоить, но вы также можете использовать необработанные запросы, если у вас есть сложные требования. Laravel использует Eloquent в качестве ORM, который прост и работает с основными серверами баз данных. Для написания запросов вы также можете использовать Fluent Query Builder , который очень похож на подход Active Record. И, конечно же, вы также можете писать необработанные запросы.

Командная строка (Кроны)

Чтобы Codeigniter вызывал скрипт cron, лучше всего создать контроллер Cron Вам также необходимо продублировать index.phpcron.php$_SERVER

 <?php
$_SERVER['SERVER_NAME'] = "xxxxxx.org";
$_SERVER['REQUEST_URI'] = "cron/index";
$_SERVER['QUERY_STRING'] = "lang=en";
$_SERVER['SERVER_PORT'] = "0";
$_SERVER['REQUEST_METHOD'] = "GET"

Затем вы можете вызвать его из командной строки с помощью php cron.php cron index

В Ларавеле это проще. У вас есть задачи с использованием инструмента командной строки, который поставляется с Laravel и называется Artisan.

Разнообразный

  • Модульное тестирование — Codeigniter использует очень элементарный класс тестирования для написания модульных тестов. Это ограничено, но вы можете интегрировать PHPUnit. Laravel поставляется с PHPUnit из коробки, самой популярной платформой для модульного тестирования PHP.
  • Аутентификация — Codeigniter не имеет ничего готового для аутентификации, но вы всегда можете использовать стороннюю библиотеку, такую ​​как Ion Auth . Larvel, с другой стороны, имеет базовую библиотеку аутентификации, которую вам нужно только настроить перед использованием.
  • Кэширование. С CodeIgniter драйвер поддерживает APC, Memcache и файловую систему. Laravel, с другой стороны, поддерживает их, а также таблицы базы данных и Redis.
  • Хуки / Фильтры — Если вы хотите войти и запустить определенный код в разных точках выполнения в CodeIgniter, вы должны сделать это, используя Хуки . Laravel предлагает фильтры .
  • Маршрутизация — Маршрутизация выполняется в Laravel и CodeIgniter практически одинаково, хотя я считаю, что Laravel более гибок.
  • Конфигурация — Конфигурация выполняется через предопределенные массивы, хранящиеся в файлах конфигурации, которые поддерживают несколько сред в обеих платформах.
  • Расширяемость. Расширение основных функциональных возможностей CodeIgniter осуществляется с помощью библиотек, и вы можете найти множество из них в Sparks (система управления пакетами для CodeIgniter). Laravel использует Bundles , которые могут показаться вам знакомыми, если вы работали с Symfony 2. Проверить уже созданные пакеты можно на сайте bundles.laravel.com .
  • Миграции. Миграции баз данных специфичны для Laravel, концепции, заимствованной из Ruby on Rails, которая управляет версиями на уровне баз данных.

сообщество

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

Будущее, кажется, очень светлое для Laravel, поскольку Laravel 4 находится в бета-версии 2, и его первая конференция только что закончилась. С другой стороны, для CodeIgniter есть несколько участников, которые фиксируют / объединяют исправления в CodeIgniter 2, но дата выпуска CodeIgniter 3 отсутствует.

Вывод

С Laravel 4 на горизонте, фреймворк определенно набирает обороты, и сообщество за ним очень активно. Я немного ностальгирую, когда говорю о CodeIgniter, но в то время он мне очень помог. Он научил меня пользоваться MVC, был легок в освоении, заработал мои первые деньги, и я даже сделал свой первый обзор книги об этом, но со временем он почти не изменился. Может быть, это только потому, что это было очень хорошо в том, что он сделал? Но веб-разработка быстро меняется, и появляются новые технологии, поэтому, если вы хотите выжить, вы должны идти в ногу.

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

Комментарии к этой статье закрыты. Есть вопрос по PHP фреймворкам? Почему бы не спросить об этом на наших форумах ?

Изображение через Fotolia