Какой PHP фреймворк выбрать (Laravel vs Yii2 vs CodeIgniter vs Phalcon)

Какой PHP фреймворк выбрать (Laravel vs Yii2 vs CodeIgniter vs Phalcon)

Привествую друзья, коллеги, случаянно забредшие сюда читатели!

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

Поехали!

Давным давно, когда создание однотиповых решений мне надоело, захотелось делать что-то уникальное, вроде instagram, trello, mindmup.

Подобные веб приложения не напишешь на wordpress или modx, здесь нужна невероятная гибкость движка в соотношении удобство разработки/результат, и я начал выбирать php фреймворк.

Первым мой выбор пал на

Фреймворк Phalcon

block

Этот фреймворк написан на С++ и устанавливается как дополнение к php, в конфигурации языка надо прописать

extension=php_phalcon.dll

и соответственно скачать и установить сам php_phalcon.dll

Phalcon самый быстрый из всех php фреймворков, вот прям самый

block

Так как он написан на С++, он занимает минимум оперативной памяти, имеет очень большую скорость выполнения, и вообще показывает себя лучше всех

Но, у этого фреймворка минимальный набор функционала, из коробки почти ничего нет

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

В оринтеровке на скорость, второй на очереди был

Фреймворк CodeIgniter

block

Второй по скорости фреймворк после Phalcon. Такой-же спартанский набор основных функций

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

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

Фреймворк Yii2

block

"Вот это уже неплохой вариант" - подумал я первый раз читая документацию этого фреймворка. И действительно, отечественная разработка, лидирующий по популярности PHP фреймворк в России, горы готовых модулей, один только RBAC чего стоит, встроенный генератор CRUD также невероятно облегчает разработку

Но походу работы, вот что-то не клеится, постоянно возникают очень странные проблемы, о которых в документации не слова а на форумах сотни вопросов.

Фреймворк конечно быстрый для старта, но костылей вы на нем соберете немерено, взять хотя бы его негибкую систему роутинга, и вшитый в ядро jQuery

Вот таким страшным образом выглядит конфиг yii2

$config = [ 'id' => 'basic', 'basePath' => dirname(__DIR__), 'extensions' => require __DIR__ . '/../vendor/yiisoft/extensions.php', 'components' => [ 'cache' => [ 'class' => 'yii\caching\FileCache', ], 'mailer' => [ 'class' => 'yii\swiftmailer\Mailer', ], 'log' => [ 'class' => 'yii\log\Dispatcher', 'traceLevel' => YII_DEBUG ? 3 : 0, 'targets' => [ [ 'class' => 'yii\log\FileTarget', ], ], ], 'db' => [ 'class' => 'yii\db\Connection', 'dsn' => 'mysql:host=localhost;dbname=stay2', 'username' => 'root', 'password' => '', 'charset' => 'utf8', ], ], ];

В поисках своего идеала, я наткнулся на

Фреймворк Laravel

block

Попробовал, все как обычно, установил, запустил, полез в код параллельно подглядывая в довольно неплохую документацию

Я - Хм, а как сделать авторизацию?

Документация - попробуй в консоли написать:

php artisan make:auth

Я - И все, серьезно?

Документация - Да, ты отлично выглядишь)

Я - Ты тоже, спасибо

Действительно, в Laravel оказалось все довольно просто, та же туча готовых модулей как у yii2, только все они работают как надо, и да, очень приятный код, действительно, вот пример основного конфига Laravel 5 "config/app.php"

<?php return [ /* |-------------------------------------------------------------------------- | Application Name |-------------------------------------------------------------------------- | | This value is the name of your application. This value is used when the | framework needs to place the application's name in a notification or | any other location as required by the application or its packages. | */ 'name' => env('APP_NAME', 'Laravel'), /* |-------------------------------------------------------------------------- | Application Environment |-------------------------------------------------------------------------- | | This value determines the "environment" your application is currently | running in. This may determine how you prefer to configure various | services the application utilizes. Set this in your ".env" file. | */ 'env' => env('APP_ENV', 'production'), /* |-------------------------------------------------------------------------- | Application Debug Mode |-------------------------------------------------------------------------- | | When your application is in debug mode, detailed error messages with | stack traces will be shown on every error that occurs within your | application. If disabled, a simple generic error page is shown. | */ 'debug' => env('APP_DEBUG', false), /* |-------------------------------------------------------------------------- | Application URL |-------------------------------------------------------------------------- | | This URL is used by the console to properly generate URLs when using | the Artisan command line tool. You should set this to the root of | your application so that it is used when running Artisan tasks. | */ 'url' => env('APP_URL', 'http://localhost'), /* |-------------------------------------------------------------------------- | Application Timezone |-------------------------------------------------------------------------- | | Here you may specify the default timezone for your application, which | will be used by the PHP date and date-time functions. We have gone | ahead and set this to a sensible default for you out of the box. | */ 'timezone' => 'UTC', /* |-------------------------------------------------------------------------- | Application Locale Configuration |-------------------------------------------------------------------------- | | The application locale determines the default locale that will be used | by the translation service provider. You are free to set this value | to any of the locales which will be supported by the application. | */ 'locale' => 'en', /* |-------------------------------------------------------------------------- | Application Fallback Locale |-------------------------------------------------------------------------- | | The fallback locale determines the locale to use when the current one | is not available. You may change the value to correspond to any of | the language folders that are provided through your application. | */ 'fallback_locale' => 'en', /* |-------------------------------------------------------------------------- | Encryption Key |-------------------------------------------------------------------------- | | This key is used by the Illuminate encrypter service and should be set | to a random, 32 character string, otherwise these encrypted strings | will not be safe. Please do this before deploying an application! | */ 'key' => env('APP_KEY'), 'cipher' => 'AES-256-CBC', /* |-------------------------------------------------------------------------- | Autoloaded Service Providers |-------------------------------------------------------------------------- | | The service providers listed here will be automatically loaded on the | request to your application. Feel free to add your own services to | this array to grant expanded functionality to your applications. | */ 'providers' => [ /* * Laravel Framework Service Providers... */ Illuminate\Auth\AuthServiceProvider::class, Illuminate\Broadcasting\BroadcastServiceProvider::class, Illuminate\Bus\BusServiceProvider::class, Illuminate\Cache\CacheServiceProvider::class, Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class, Illuminate\Cookie\CookieServiceProvider::class, Illuminate\Database\DatabaseServiceProvider::class, Illuminate\Encryption\EncryptionServiceProvider::class, Illuminate\Filesystem\FilesystemServiceProvider::class, Illuminate\Foundation\Providers\FoundationServiceProvider::class, Illuminate\Hashing\HashServiceProvider::class, Illuminate\Mail\MailServiceProvider::class, Illuminate\Notifications\NotificationServiceProvider::class, Illuminate\Pagination\PaginationServiceProvider::class, Illuminate\Pipeline\PipelineServiceProvider::class, Illuminate\Queue\QueueServiceProvider::class, Illuminate\Redis\RedisServiceProvider::class, Illuminate\Auth\Passwords\PasswordResetServiceProvider::class, Illuminate\Session\SessionServiceProvider::class, Illuminate\Translation\TranslationServiceProvider::class, Illuminate\Validation\ValidationServiceProvider::class, Illuminate\View\ViewServiceProvider::class, /* * Package Service Providers... */ /* * Application Service Providers... */ App\Providers\AppServiceProvider::class, App\Providers\AuthServiceProvider::class, // App\Providers\BroadcastServiceProvider::class, App\Providers\EventServiceProvider::class, App\Providers\RouteServiceProvider::class, ], /* |-------------------------------------------------------------------------- | Class Aliases |-------------------------------------------------------------------------- | | This array of class aliases will be registered when this application | is started. However, feel free to register as many as you wish as | the aliases are "lazy" loaded so they don't hinder performance. | */ 'aliases' => [ 'App' => Illuminate\Support\Facades\App::class, 'Artisan' => Illuminate\Support\Facades\Artisan::class, 'Auth' => Illuminate\Support\Facades\Auth::class, 'Blade' => Illuminate\Support\Facades\Blade::class, 'Broadcast' => Illuminate\Support\Facades\Broadcast::class, 'Bus' => Illuminate\Support\Facades\Bus::class, 'Cache' => Illuminate\Support\Facades\Cache::class, 'Config' => Illuminate\Support\Facades\Config::class, 'Cookie' => Illuminate\Support\Facades\Cookie::class, 'Crypt' => Illuminate\Support\Facades\Crypt::class, 'DB' => Illuminate\Support\Facades\DB::class, 'Eloquent' => Illuminate\Database\Eloquent\Model::class, 'Event' => Illuminate\Support\Facades\Event::class, 'File' => Illuminate\Support\Facades\File::class, 'Gate' => Illuminate\Support\Facades\Gate::class, 'Hash' => Illuminate\Support\Facades\Hash::class, 'Lang' => Illuminate\Support\Facades\Lang::class, 'Log' => Illuminate\Support\Facades\Log::class, 'Mail' => Illuminate\Support\Facades\Mail::class, 'Notification' => Illuminate\Support\Facades\Notification::class, 'Password' => Illuminate\Support\Facades\Password::class, 'Queue' => Illuminate\Support\Facades\Queue::class, 'Redirect' => Illuminate\Support\Facades\Redirect::class, 'Redis' => Illuminate\Support\Facades\Redis::class, 'Request' => Illuminate\Support\Facades\Request::class, 'Response' => Illuminate\Support\Facades\Response::class, 'Route' => Illuminate\Support\Facades\Route::class, 'Schema' => Illuminate\Support\Facades\Schema::class, 'Session' => Illuminate\Support\Facades\Session::class, 'Storage' => Illuminate\Support\Facades\Storage::class, 'URL' => Illuminate\Support\Facades\URL::class, 'Validator' => Illuminate\Support\Facades\Validator::class, 'View' => Illuminate\Support\Facades\View::class, ], ];

Радует глаз, не правда ли?

Для удобства, в laravel есть консоль artisan, через нее вы можете полностью работать с приложением, создавать миграции, модели, контроллеры, ресурсные контроллеры, и тд, все что надо для работы.

Также вам на помошь приходит шаблонизатор Blade который очень упрощает воспринимаемость php кода а также, laravel прекрасно работает в связке с Vue.js что дает возможность быстро разворачивать грамотные SPA приложения

И главное, никаких проблем, как в документации сказано, так все и работает, и это относится ко всем плагинам Laravel

Заключение

И так, мой выбор остановился на Laravel, на данный момент это самый развитый php фреймворк, хотя и не самый производительный, выбрав этот вариант, вы отгородите себя от ночей проведенных за поиском ошибки которая на самом деле кроется в некачественном коде самого ядра

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

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

Кстати, у Laravel есть собрат, микро-фреймворк для разработки rest-api - Lumen

block

Если вы знаете Laravel, то вы знаете и Lumen, приятный бонус)

Тебе может понравится

Создание веб-сайта, соответствующего Вашей нише

Как только вы определили нишу для своего бизнеса, крайне важно, чтобы ваш веб-са
Показать полностью...

Конвертируйте потенциальных клиентов с помощью страницы финансового CTA

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

Коронавирус и Ваш Веб-сайт

Учитывая текущую ситуацию с коронавирусом (COVID-19), мы помогаем многим предпри
Показать полностью...

SEM vrs SEO vrs PPC

В настоящее время существует множество аббревиатур, связанных с веб-маркетингом.
Показать полностью...

Готов ли Ваш Сайт к 2017 году?

Возможно, ваш сайт уже "отстал от времени" по сравнению с вашими конкурентами. В
Показать полностью...

Что такое Профили посетителей Веб-сайта?

Создание профилей посетителей-это важный шаг в понимании целей и задач ваших веб
Показать полностью...