Где воздух гор - там тишина снегов, молчание камней и дремлет сила

Программирование Web

Простое приложение на фреймворке Phalcon

2020-07-26 09:25:27






Phalcon — достаточно новый фреймворк, реализованный на языках программирования C и Zephir. Напишем простое приложение.

1. Создадим новый проект:

phalcon create-project amdin


2.Создадим новую базу данных «admin_db»,добавим новую таблицу:

CREATE TABLE `users` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`first_name` varchar(50) NOT NULL,
`last_name` varchar(60) NOT NULL,
`email` varchar(100) NOT NULL,
`active` tinyint(1) NOT NULL
PRIMARY KEY (`id`)
);
 Затем отредактируем файл настроек app/config/config.php



[database]
adapter = Mysql
host = "127.0.0.1"
username = "root"
password = "dbpwd"
dbname = "admin_db"
Также у нас тут же настройки путей проекта:

'application' => [
'appDir' => APP_PATH . '/',
'controllersDir' => APP_PATH . '/controllers/',
'modelsDir' => APP_PATH . '/models/',
'migrationsDir' => APP_PATH . '/migrations/',
'viewsDir' => APP_PATH . '/views/',
'pluginsDir' => APP_PATH . '/plugins/',
'libraryDir' => APP_PATH . '/library/',
'cacheDir' => BASE_PATH . '/cache/',
'baseUri' => '/admin/',
]



Кроме того, нам надо активировать механизм сессий для поддержки системы аутентификации пользователей. Для этого в файле app/config/services.php введем такой код:
$di->setShared('session', function () {
$session = new SessionAdapter();
$session->start();
return $session;
});
Туда же поместим поддержку кэширования:

use Phalcon\Cache\Admin\File as AdminFile;

$cache = new AdminFile(
[
'cacheDir' => '../app/cache/',
]
);

3.Теперь сгенерируем новую модель:

phalcon model user


Нашу модель надо заполнить кодом. Сначала добавим туда валидатор «Phalcon\Validation\Validator\Email» для проверки правильности ввода email и реализуем его в методе validation() Также мы распишем переменные класса, которые у нас есть
в качестве полей таблицы «users» базы данных.


<?php

use Phalcon\Validation;
use Phalcon\Validation\Validator\Email as EmailValidator;

class User extends \Phalcon\Mvc\Model
{

/**
*

* @var integer
*/
public $id;

/**
*

* @var string
*/
public $name;

/**
*

* @var string
*/
public $email;

/**
*

* @var string
*/
public $password;

/**
*

* @var string
*/
public $active;


/**
*
* @return boolean
*/
public function validation()
{
$validator = new Validation();

$validator->add(
'email',
new EmailValidator(
[
'model' => $this,
'message' => 'Please enter valid email!',
]
)
);

return $this->validate($validator);
}



}

4. Теперь нам надо создать контролеры:

phalcon controller users

phalcon controller home


Первый контролер будет для работы с пользователями, а второй в качестве домашней страницы.
Вначале нам надо создать метод для регистрации нового пользователя. Новый метод мы назовем registerAction(), слово «Action» необходимо добавлять всегда.






<?php

use Phalcon\Mvc\Controller;

class UsersController extends Controller
{
public function registerAction()
{
$user = new Users();

$login = $this->request->getPost('login');
$password = $this->request->getPost('password');

if ($user === false) {
$this->flash->error("Incorrect credentials");
return $this->dispatcher->forward(array(
'controller' => 'users', 'action' => 'index'
));
}
$this->session->set('auth', $user->id);
$this->flash->success("You've been successfully logged in");

$user->login = $login;


$user->password = $this→security→sh1($password);

$user->save();
}
}

Этот метод использует шифрование sha1 для генерации безопасного пароля: security→sh1($passord) Также мы сохраняем user_id в качестве переменной сессии.

5. Еще необходимо несколько других методов для входа и выхода пользователей из нашей админки. Новая версия контролера будет выглядеть так:

<?php

use Phalcon\Mvc\Controller;

class UsersController extends Controller
{
public function registerAction()
{
$user = new Users();

$login = $this->request->getPost('login');
$password = $this->request->getPost('password');

if ($user === false) {
$this->flash->error("Incorrect credentials");
return $this->dispatcher->forward(array(
'controller' => 'users', 'action' => 'index'
));
}


$this->session->set('auth', $user->id);
$this->flash->success("You've been successfully logged in");

$user->login = $login;


$user->password = $this→security->sha1($password);

$user->save();
}
}

public function loginAction() {

if ($this->request->isPost()) {
$user = Users::findFirst(array(
'login = :login: and password = :password:',
'bind' => array(
'login' => $this->request->getPost("login"),
'password' => sha1($this->request->getPost("password"))
)
));

if ($user === false) {
$this->flash->error("Incorrect credentials");
return $this->dispatcher->forward(array(
'controller' => 'home',
'action' => 'index'
));
}
$this->session->set('auth', $user->id);
$this→flash→success("You logged in ok");
}
return $this->dispatcher->forward(array(
'controller' => 'users',
'action' => 'index'
));
}


public function logoutAction() {
$this->session->remove('auth');
return $this->dispatcher->forward(array(
'controller' => 'home',
'action' => 'index'
));
}

}


Метод loginAction() проверяет есть ли данный пользователь в базе данных, затем в случае успеха, проводит переадресацию на контролер «home», который у нас, как мы определили, является домашней страницей. Другой метод logoutAction() осуществляет выход пользователя из админки, при этом обязательно надо удалить текущую сессию:
$this->session->remove('auth');

Нам осталось добавить метод indexAction(), который будет показывать текущего пользователя.Финальная версия класса контроллера выглядит:


<?php

use Phalcon\Mvc\Controller;

class UsersController extends Controller
{

public function indexAction() {

$this->view->setVar('User:', is_array($this->auth->getIdentity()));

}


public function registerAction()
{
$user = new Users();

$login = $this->request->getPost('login');
$password = $this->request->getPost('password');

if ($user === false) {
$this->flash->error("Incorrect credentials");
return $this->dispatcher->forward(array(
'controller' => 'users', 'action' => 'index'
));
}
$this->session->set('auth', $user->id);
$this->flash->success("You successfully logged ok");

$user->login = $login;

$user->password = $this->security->hash($password);

$user->save();
}
}

public function loginAction() {
if ($this->request->isPost()) {
$user = Users::findFirst(array(
'login = :login: and password = :password:',
'bind' => array(
'login' => $this->request->getPost("login"),
'password' => sha1($this->request->getPost("password"))
)
));
if ($user === false) {
$this->flash->error("Incorrect credentials");
return $this->dispatcher->forward(array(
'controller' => 'users',
'action' => 'index'
));
}
$this->session->set('auth', $user->id);
$this->flash->success("You've been successfully logged in");
}
return $this->dispatcher->forward(array(
'controller' => 'home',
'action' => 'index'
));
}


public function logoutAction() {
$this->session->remove('auth');
return $this->dispatcher->forward(array(
'controller' => 'home',
'action' => 'index'
));
}

}



7. Теперь отредактируем код контролера HomeController, который используется по умолчанию.


<?php

use Phalcon\Mvc\Controller;

class HomeController extends Controller
{

public function indexAction() {


$info = "Welcome to home page";
$this->view->setVar('info', $info);

}

}


Осталось добавить файлы типа view, которые будут использоваться в качестве визуальных интерфейсов. Это работа для дизайнеров :-) В Phalcone есть шаблонный движок Volt, так же мы можем работать с файлами типа phtml. На этом все.

Здесь нет комментариев


Новый комментарий:
























Яндекс.Метрика