Как разработчик PHP, я был постоянным пользователем различных PHP-фреймворков, в основном сосредоточенных на CakePHP. Недавно я почувствовал необходимость пойти по магазинам и у меня было много веских причин выбрать FuelPHP . Он имеет встроенную модульную структуру и полную гибкость с акцентом на сообщество. До Fuel я был пользователем CakePHP и, как и Cake, Fuel — огромная платформа, управляемая сообществом.
Установка FuelPHP Framework
Чтобы установить FuelPHP, вам нужно только запустить: curl get.fuelphp.com/oil | sh
curl get.fuelphp.com/oil | sh
и создайте свой проект с помощью oil create project_name
.
Будут необязательные команды, такие как oil refine install
, которая делает необходимые каталоги доступными для записи, и, наконец, выполните composer update
для установки зависимостей.
Что такое масло FuelPHP?
Если у вас есть опыт работы с PHP-фреймворками, концепция oil
будет вам полностью понятна. Например, Fuel’s Oil является заменителем Laravel Artisan. Действительно, oil — это утилита командной строки, облегчающая быструю разработку, тестирование приложения и выполнение нескольких задач. Это позволит вам ускорить разработку, предоставив несколько функций:
- Генерация: создание компонентов MVC, миграций и т. Д.
- Уточнить: запускать такие задачи, как миграция, а также собственные задачи.
- Пакет: установка, обновление и удаление пакетов.
- Консоль: тестируйте свой код в режиме реального времени с помощью интерактивной оболочки.
- Тестирование: запускать тесты PHPUnit.
Подробнее о масле читайте здесь .
Пакеты FuelPHP
В Fuel есть пакеты, которые позволяют вам делиться созданными вами пакетами с другими людьми. Их можно найти на Packagist , как и все пакеты Composer.
Есть два способа установить пакет. Вы можете сделать это вручную, заливая масло, или использовать Composer. Я лично предпочитаю подход Composer.
Вы можете прочитать больше о пакетах здесь .
Начиная
Как вы знаете, Fuel использует архитектуру MVC, как и большинство других фреймворков. Каждый фреймворк имеет свои правила для определенных частей mvc. В Fuel контроллеры размещаются в каталоге fuel/app/classes/controller
и имеют префикс controller_
. При желании они должны расширить класс контроллера для полного набора функций. В Fuel вы можете автоматически направлять HTTP-запросы с помощью некоторых префиксных действий, таких как post и get при определении метода.
Давайте начнем работать с Основами Топлива.
Пожалуйста, убедитесь, что вы включили следующие два пакета в app/config/config.php
:
'packages' => array( 'orm', 'auth' )
Мы будем использовать их в следующем разделе. Маршрут по умолчанию — hello
, который показывает вашу страницу приветствия. Если вы хотите внести некоторые изменения, просто отредактируйте fuel/app/config/routes.php
:
return array( '_root_' => 'welcome/index', // The default route '_404_' => 'welcome/404', // The main 404 route 'hello(/:name)?' => array('welcome/hello', 'name' => 'hello') );
Передай привет FuelPHP
Сейчас самое время поздороваться с миром топлива. Сначала создайте простое приложение для аутентификации с помощью Simpleauth . Simpleauth относится к простой системе аутентификации, которая включена в пакет auth. Чтобы использовать Simpleauth, скопируйте fuel/packages/auth/config/auth.php
и simpleauth.php
в fuel/app/config/
. Затем создайте таблицу базы данных. Я использую миграции вместо традиционных операций с базами данных. Я бы скопировал core/config/migrations.php
в app/config/migrations.php
и выполнил следующую команду для создания скаффолда:
php oil generate scaffold user username:string password:string email:string profile_fields:text created_at:string updated_at:string last_login:integer[20]
Это создаст файл в нашей папке app/migrations
именем 001_create_users.php
, который я отредактировал как:
namespace Fuel\Migrations; class 001_create_users { public function up() { \DBUtil::create_table('users', array( 'id' => array('constraint' => 11, 'type' => 'int', 'auto_increment' => true), 'username' => array('constraint' => 255, 'type' => 'varchar'), 'password' => array('constraint' => 255, 'type' => 'varchar'), 'email' => array('constraint' => 255, 'type' => 'varchar'), 'last_login' => array('constraint' => 20, 'type' => 'int'), 'profile_fields' => array('constraint' => 255, 'type' => 'varchar'), 'created_at' => array('constraint' => 255, 'type' => 'varchar'), 'updated_at' => array('constraint' => 255, 'type' => 'varchar') ), array('id')); $username = "AwesomeAlireza"; $password = "@awesomeAlireza@"; $pass_hash = \Auth::instance()->hash_password($password); $email = "[email protected]"; $users = \Model_User::forge(array( 'username' => $username, 'password' => $pass_hash, 'email' => $email, 'profile_fields' => '', 'last_login' => '' )); if ($users and $users->save()) \Cli::write("the user has been created"); else \Cli::write("failed to create user"); } public function down() { \DBUtil::drop_table('users'); } }
Чтобы отправить это, вам просто нужно запустить php oil refine migrate
.
Если вы видите этот результат после Migrated to latest version: 1.
, это означает, что все прошло хорошо. После этого, пожалуйста, создайте общий контроллер в app/classes/controller/common.php
:
class controller_common extends Controller_Template { public function before() { parent::before(); $uri_string = explode('/', Uri::string()); $this->template->logged_in = false; if (count($uri_string)>1 and $uri_string[0] == 'users' and $uri_string[1] == 'login') return; else { if(\Auth::check()) { $user = \Auth::instance()->get_user_id(); $this->user_id = $user[1]; $this->template->logged_in = true; } else \Response::redirect('/users/login'); } } }
А пользовательский контроллер находится в app/classes/controller/users.php
:
class controller_users extends Controller_Common { public function action_index() { $data['users'] = Model_User::find('all'); $this->template->title = "Users"; $this->template->content = View::forge('users/index', $data); } public function action_login() { if (Auth::check()) Response::redirect('/'); $val = Validation::forge('users'); $val->add_field('username', 'Your username', 'required|min_length[3]|max_length[20]'); $val->add_field('password', 'Your password', 'required|min_length[3]|max_length[20]'); if ($val->run()) { $auth = Auth::instance(); if ($auth->login($val->validated('username'), $val->validated('password'))) { Session::set_flash('notice', 'FLASH: logged in'); Response::redirect('users'); } else { $data['username'] = $val->validated('username'); $data['errors'] = 'Wrong username/password. Try again'; } } else { if ($_POST) { $data['username'] = $val->validated('username'); $data['errors'] = 'Wrong username/password combo. Try again'; } else { $data['errors'] = false; } } $this->template->errors = $data['errors']; $this->template->content = View::forge('users/login')->set($data); } public function action_view($id = null) { $data['user'] = Model_User::find($id); $this->template->title = "User"; $this->template->content = View::forge('users/view', $data); } public function action_logout() { Auth::instance()->logout(); Response::redirect('/'); } }
изclass controller_users extends Controller_Common { public function action_index() { $data['users'] = Model_User::find('all'); $this->template->title = "Users"; $this->template->content = View::forge('users/index', $data); } public function action_login() { if (Auth::check()) Response::redirect('/'); $val = Validation::forge('users'); $val->add_field('username', 'Your username', 'required|min_length[3]|max_length[20]'); $val->add_field('password', 'Your password', 'required|min_length[3]|max_length[20]'); if ($val->run()) { $auth = Auth::instance(); if ($auth->login($val->validated('username'), $val->validated('password'))) { Session::set_flash('notice', 'FLASH: logged in'); Response::redirect('users'); } else { $data['username'] = $val->validated('username'); $data['errors'] = 'Wrong username/password. Try again'; } } else { if ($_POST) { $data['username'] = $val->validated('username'); $data['errors'] = 'Wrong username/password combo. Try again'; } else { $data['errors'] = false; } } $this->template->errors = $data['errors']; $this->template->content = View::forge('users/login')->set($data); } public function action_view($id = null) { $data['user'] = Model_User::find($id); $this->template->title = "User"; $this->template->content = View::forge('users/view', $data); } public function action_logout() { Auth::instance()->logout(); Response::redirect('/'); } }
Как вы можете видеть, контроллер расширяет Controller_Common
для ограничения входа в систему. Я также проверил свои входные данные в контроллере, но они могут быть и в нашей модели.
Мы закончили с контроллерами, и пришло время создать представление для нашего приложения. В Fuel файлы просмотра находятся в app/views/CONTROLLERNAME/
. Первый вид, который мы создадим, это app/views/users/login.php
:
<h2>Login</h2> Login to your account using your username and password. <div class="input required"> <?php isset($errors) ? $errors : false; ?> <?php echo Form::open('users/login'); ?> <?php echo Form::label('Username', 'username'); ?> <?php echo Form::input('username', null, array('size' => 30)); ?> </div> <div class="input password required"> <?php echo Form::label('Password', 'password'); ?> <?php echo Form::password('password', null, array('size' => 30)); ?> </div> <div class="submit" > <?php echo Form::submit('login', 'Login'); ?> </div>
А теперь файл index.php
:
<div><?php echo $user->username; ?></div>
Единственное, что вам нужно сделать сейчас, это просто перейти по http://127.0.0.1/public/users/login
в вашем браузере, и вы увидите страницу, похожую на:
Поздравляем, вы создали простое приложение для аутентификации!
Код также доступен на Github .
Вывод
Как видите, Fuel значительно упростила путь к созданию веб-приложений. У каждого фреймворка есть свои преимущества, но я надеюсь, что этот пост показал вам некоторые из Fuel, так что вы можете дать ему шанс, которого он заслуживает в вашем наборе инструментов.
Комментарии? Обратная связь? Дай мне знать!