Статьи

Повторное введение FuelPHP

Как разработчик PHP, я был постоянным пользователем различных PHP-фреймворков, в основном сосредоточенных на CakePHP. Недавно я почувствовал необходимость пойти по магазинам и у меня было много веских причин выбрать FuelPHP . Он имеет встроенную модульную структуру и полную гибкость с акцентом на сообщество. До Fuel я был пользователем CakePHP и, как и Cake, Fuel — огромная платформа, управляемая сообществом.

FuelPHP

Установка 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 = "Alireza@is-awesome.com"; $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, так что вы можете дать ему шанс, которого он заслуживает в вашем наборе инструментов.

Комментарии? Обратная связь? Дай мне знать!