Учебники

Phalcon — Краткое руководство

Phalcon — Обзор

Phalcon представлен как одна из последних платформ PHP, разработанная группой энтузиастов-разработчиков. Phalcon — это слабо связанная структура, что означает, что он позволяет обрабатывать его объекты как клеевые компоненты в зависимости от потребностей применения.

Phalcon предлагает некоторые уникальные возможности по сравнению с другими фреймворками (традиционными или существующими) в PHP. Ниже приведены некоторые из наиболее заметных особенностей Phalcon —

  • Это полноценный фреймворк с открытым исходным кодом.

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

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

  • Для разработчика, знакомого с Model-View-Controller (MVC) и объектно-реляционным моделированием (ORM), работа с Phalcon подобна легкой прогулке.

Это полноценный фреймворк с открытым исходным кодом.

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

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

Для разработчика, знакомого с Model-View-Controller (MVC) и объектно-реляционным моделированием (ORM), работа с Phalcon подобна легкой прогулке.

Спектакль

Производительность Phalcon — это особенность, которая отличает его от других традиционных фреймворков PHP. Phalcon имеет комбинацию как PHP, так и C; каждый из них может быть использован как отдельный модуль. Компиляция каждого запроса рассматривается в Phalcon на более высокой скорости, что делает все как будто готовым к использованию.

Спектакль

Язык C

Phalcon совместим с C, что увеличивает скорость компиляции. Кроме того, C в сочетании с Phalcon обеспечивает объектно-реляционное сопоставление (ORM), которое обеспечивает согласованность с созданными моделями. Каждая модель, созданная в Phalcon, связана с таблицей реляционной базы данных. ORM в Phalcon реализован исключительно на C.

Инструменты разработчика

Инструменты разработчика используются для разработки веб-приложений. Эти инструменты помогают в создании приложения скаффолда с сочетанием всех функций (C — Создать, R — Читать, U — Обновить, D — Удалить). Инструменты разработчика также включают расширяемую поддержку сторонних библиотек, которые будут реализованы в Phalcon.

Реляционное сопоставление объектов

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

Phalcon Vs Другие фреймворки

В следующей таблице показано, как Phalcon отличается от других популярных фреймворков, таких как Yii и Laravel.

Yii Laravel Phalcon
Тип проектов Yii помогает создавать крупные проекты, такие как форумы, порталы, CMS, веб-сервисы RESTful и т. Д. Laravel используется для создания веб-приложений. Он известен изысканным и сложным синтаксисом. Phalcon используется для разработки различных проектов.
Поддержка базы данных Yii поддерживает все реляционные и нереляционные базы данных. Laravel поддерживает все реляционные базы данных. Phalcon оказывает равную поддержку реляционным и нереляционным базам данных.
язык Фреймворк Yii написан исключительно на PHP. Laravel написан на PHP и следует шаблону MVC. Phalcon включает в себя как PHP, так и C.
Масштабируемость Yii вполне масштабируем для малых и средних проектов. Масштабируемость высока для Laravel со всеми видами проектов. Хорошо для средних проектов.
Спектакль Сравнительно низкий. Высокий, но меньший по сравнению с Phalcon. Высокая производительность.

Phalcon — Окружающая среда

Предварительные условия — нам нужен стек WAMP / LAMP / MAMP или XAMPP для этой платформы.

Ниже приведены шаги для процесса установки платформы Phalcon в Windows.

Шаг 1 — Установка Phalcon полностью зависит от файла DLL . DLL (Dynamic Link Library) создает необходимый пакет и плагины для Phalcon.

Следующая ссылка используется для загрузки файла DLL — https://phalconphp.com/en/download

Phalcon для Windows

Шаг 2 — Загрузите необходимый файл DLL. Проверьте правильность конфигурации системы и загрузите необходимый файл DLL. После загрузки файла извлеките phalcon-php.dll в / php / ext в папке xampp .

Шаг 3 — Отредактируйте путь в файле php.ini, чтобы настроить его аналогично другим файлам .dll .

Phalcon php

Шаг 4 — После того, как путь отредактирован, перезапустите стек xampp / wamp . Он будет хорошо виден на приборной панели после правильной установки файла DLL .

файл dll

Шаг 5 — После загрузки пакета установите переменную пути в свойствах системы.

Установить путь

Шаг 6 — Файлы DLL и инструменты Phalcon вместе помогают в создании проекта / веб-приложения. Пользователь может проверить в командной строке, была ли успешно установлена ​​платформа Phalcon. Вывод будет отображаться, как показано на следующем снимке экрана.

Веб приложение

Шаг 7 — Как только этот необходимый вывод получен, создайте проект с помощью следующей команды —

phalcon create-project <project-name> 

Будет отображен следующий вывод.

Выход

Шаг 8 — Веб-приложение успешно создано. Нажмите следующий URL — http: // localhost / demo1

Вывод будет отображаться, как показано на следующем снимке экрана. Это страница приветствия для Phalcon PHP.

Страница приветствия

Phalcon — Структура приложения

В этой главе мы обсудим структуру приложения Phalcon. Ниже приводится полная структура каталогов проекта Phalcon.

Состав

Существует одна корневая папка, которая считается основой кода и является общедоступной для веб-сервера. Он также называется веб-каталогом . Другие папки вне корневого веб-каталога считаются недоступными для веб-сервера и для проекта Phalcon.

После создания проекта структура каталога будет отображаться в папке wamp / xampp следующим образом. Рассмотрим проект, который мы создали в предыдущей главе.

demo1

Ниже приведены папки и подпапки проекта.

Приложение

Эта папка состоит из всех важных файлов скриптов и папок. Полное веб-приложение разработано на основе папки «app». Файлы конфигурации помогают в настройке, необходимой для бесперебойной работы приложения.

Ниже приведен подробный вид папки приложения для данного веб-приложения Phalcon.

Приложение

Он состоит из конфигурации, контроллеров, библиотеки, миграций, моделей и представлений.

конфиг

конфиг

Вся конфигурация, необходимая для веб-приложения в Phalcon, находится в этой папке. Он включает в себя информацию, связанную с подключением к базе данных, сторонними библиотеками, которые будут добавлены, если таковые имеются, и услугами, которые будут включены.

Контроллеры

Все контроллеры включены в эту папку. Они используются для обработки запросов и генерации ответа.

Библиотека

Сторонние библиотеки для веб-приложения (кроме существующей платформы Phalcon).

Библиотека

Миграции

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

модели

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

Просмотры

Он представляет собой все представления, связанные с веб-приложением. Эти представления отображаются конечным пользователям с помощью контроллеров.

кэш

В этот каталог входят данные, связанные с кэшированием, что помогает повысить производительность.

общественного

Он включает в себя все папки для управления активами, которые включают в себя CSS, JavaScript, файлы для загрузки и некоторые метаданные.

общественного

Файл .htaccess

Веб-серверы, работающие на программном обеспечении Apache Web Server, используют .htaccess в качестве файла конфигурации. Когда он помещен в каталог, вся необходимая конфигурация загружается сразу после запуска сервера.

Например, можно настроить веб-сайт так, чтобы он был доступен только для определенных IP-адресов с файлом .htaccess .

Phalcon — Функциональность

Model View Controller (MVC) — это программный дизайн и структурный шаблон для разработки веб-приложений. Эта программная архитектура отделяет представление информации от взаимодействия пользователя с ней.

Модель MVC определяет веб-приложения с тремя уровнями логики.

MVC

модель

Модели — это объекты, которые представляют знания. Между моделью и ее частями должна быть взаимно-однозначная связь. Он включает в себя всю логику, которая будет использоваться для подключения к базе данных и выполнения операций CRUD.

Посмотреть

Представление — это визуальное представление своей модели. Представление взаимодействует с моделью или ее частями и получает данные, необходимые для представления из модели. Это достигается путем отправки запросов и получения соответствующих ответов. Просмотр включает в себя все данные, которые видит конечный пользователь.

контроллер

Контроллер выступает в качестве посредника между пользователем и системой (модель и представление). Он принимает запрос от пользователя, через представление отправляет его модели. Модель манипулирует им и отправляет ответ контроллеру, который отображается как вывод конечному пользователю через представление.

Контроллер получает такой вывод пользователя и переводит его в соответствующие сообщения. Эти сообщения используются представлением для отображения в качестве соответствующих ответов.

Рабочий процесс в Phalcon

Рабочий процесс в Phalcon выглядит следующим образом:

  • Пользователь взаимодействует с пользовательским интерфейсом (представлением), и взаимодействие поддерживается с помощью некоторого метода / события.

  • Эти методы и события обрабатываются контроллером.

  • Контроллер получает доступ к модели, обновляя действие пользователя.

  • Представление использует модель для генерации соответствующего вывода.

  • Просмотр извлекает данные из своей модели. Модель не имеет прямого взаимодействия с представлением.

  • Пользовательский интерфейс ожидает дальнейшего взаимодействия с пользователем, которое начинается с нового цикла запроса и ответа.

Пользователь взаимодействует с пользовательским интерфейсом (представлением), и взаимодействие поддерживается с помощью некоторого метода / события.

Эти методы и события обрабатываются контроллером.

Контроллер получает доступ к модели, обновляя действие пользователя.

Представление использует модель для генерации соответствующего вывода.

Просмотр извлекает данные из своей модели. Модель не имеет прямого взаимодействия с представлением.

Пользовательский интерфейс ожидает дальнейшего взаимодействия с пользователем, которое начинается с нового цикла запроса и ответа.

Workflow

Phalcon включает в себя каталоги для Model, View и Controller. Следующий скриншот дает лучший сценарий.

Справочники

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

Примечание

  • Все контроллеры, созданные в веб-приложении Phalcon, расширяют Phalcon \ Mvc \ Controller .

  • Все модели, связанные с таблицами базы данных, расширяются \ Phalcon \ Mvc \ Model .

Все контроллеры, созданные в веб-приложении Phalcon, расширяют Phalcon \ Mvc \ Controller .

Все модели, связанные с таблицами базы данных, расширяются \ Phalcon \ Mvc \ Model .

Phalcon — Конфигурация

Папка config веб-приложения содержит следующие файлы:

  • config.php
  • loader.php
  • services.php

конфиг

config.php

Он включает в себя конфигурации для подключения к базе данных и маршрутизации в соответствии с путем к каталогу.

<?php 

/*
   * Modified: preppend directory path of current file, 
      because of this file own different ENV under between Apache and command line. 
   * NOTE: please remove this comment. 
*/ 

defined('BASE_PATH') || define('BASE_PATH', getenv('BASE_PATH') ?: 
   realpath(dirname(__FILE__) . '/../..')); 
defined('APP_PATH') || define('APP_PATH', BASE_PATH . '/app');  

return new \Phalcon\Config([ 
   'database' => [ 
      'adapter'     => 'Mysql', 
      'host'        => 'localhost', 
      'username'    => 'root', 
      'password'    => '', 
      'dbname'      => 'test', 
      'charset'     => 'utf8', 
   ], 
   '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'        => '/demo1/', 
   ] 
]);

loader.php

Он расширяет существующий класс \ Phalcon \ Loader () . Класс загрузчика регистрирует каталоги, для которых требуется веб-приложение.

<?php  
$loader = new \Phalcon\Loader();  

/** 
   * We're a registering a set of directories taken from the configuration file 
*/ 

$loader->registerDirs( [ 
      $config->application->controllersDir, 
      $config->application->modelsDir 
   ] 
)->register(); 

services.php

Этот файл связывает все функции, которые реализуют сервисы веб-проекта. Он реализует интерфейс Phalcon \ Di. Это также реализует внедрение зависимостей сервисов, загружая их.

По сути, файл services.php внутри папки config действует как контейнер всех служб. Этот интерфейс помогает инициализировать все службы, такие как подключение к базе данных, настройка файлов cookie, создание нового сеанса или подключение к базе данных NoSQL.

<?php  

use Phalcon\Mvc\View; 
use Phalcon\Mvc\View\Engine\Php as PhpEngine; 
use Phalcon\Mvc\Url as UrlResolver; 
use Phalcon\Mvc\View\Engine\Volt as VoltEngine; 
use Phalcon\Mvc\Model\Metadata\Memory as MetaDataAdapter; 
use Phalcon\Session\Adapter\Files as SessionAdapter; 
use Phalcon\Flash\Direct as Flash;   

/** 
   * Shared configuration service 
*/ 

$di->setShared('config', function () { 
   return include APP_PATH . "/config/config.php"; 
});  

/** 
   * The URL component is used to generate all kind of urls in the application 
*/ 

$di->setShared('url', function () { 
      $config = $this->getConfig(); 
      $url = new UrlResolver(); 
      $url->setBaseUri($config->application->baseUri);  
   return $url; 
});  

/** 
   * Setting up the view component 
*/ 
   
$di->setShared('view', function () { 
   $config = $this->getConfig();  
   $view = new View(); 
   $view->setDI($this); 
   $view->setViewsDir($config->application->viewsDir);  
   
   $view->registerEngines([ 
      '.volt' => function ($view) { 
         $config = $this->getConfig();  
         $volt = new VoltEngine($view, $this);  
         
         $volt->setOptions([ 
            'compiledPath' => $config->application->cacheDir, 
            'compiledSeparator' => '_' 
         ]);  
         return $volt; 
      }, 
      '.phtml' => PhpEngine::class  
   ]);  
   return $view; 
}); 

/** 
   * Database connection is created based in the parameters defined in the configuration 
      file 
*/ 

$di->setShared('db', function () { 
   $config = $this->getConfig();  
   $class = 'Phalcon\Db\Adapter\Pdo\\' . $config->database->adapter; 
   $connection = new $class([ 
      'host'     => $config->database->host, 
      'username' => $config->database->username, 
      'password' => $config->database->password, 
      'dbname'   => $config->database->dbname, 
      'charset'  => $config->database->charset 
   ]);  
   return $connection; 
});

Phalcon — Контроллеры

В платформе MVC «C» обозначает контроллер, который относится к коммутаторам веб-приложения. Действия, выполняемые контроллером, помогают передавать параметры представлению, чтобы оно могло отображать и реагировать на ввод пользователя соответствующим образом.

Например, если мы регистрируемся через форму регистрации, которая включает в себя данные пользователя, такие как имя пользователя, адрес электронной почты и пароль, и нажимаем кнопку «Отправить», данные, вставленные или опубликованные пользователем, отправляются через контроллер с помощью связанное действие или функция.

Особенности контроллера

Контроллер принимает входные данные из представления и взаимодействует со связанной моделью.

  • Это помогает в обновлении состояния модели, посылая команды модели. Он также может отправлять команды в связанный вид, что помогает изменить представление представления в соответствии с состоянием модели.

  • Контроллер действует как посредник между моделью и представлением.

Это помогает в обновлении состояния модели, посылая команды модели. Он также может отправлять команды в связанный вид, что помогает изменить представление представления в соответствии с состоянием модели.

Контроллер действует как посредник между моделью и представлением.

Рабочий процесс MVC в Phalcon

На следующем рисунке показан рабочий процесс MVC в Phalcon.

Рабочий процесс MVC

Шаги по созданию контроллера в Phalcon

Шаг 1 — Перенаправить на путь проекта с помощью командной строки. Обратитесь к следующему скриншоту.

Создать контроллер

Как указано на скриншоте выше, «demo» — это проект, связанный с PHP-фреймворком Phalcon.

Шаг 2 — Используйте следующую команду, чтобы создать связанный контроллер.

phalcon controller <controller-name> 

Ниже приведены результаты успешного выполнения вышеуказанной команды.

выполнение

Примечание . Имена классов контроллеров должны иметь суффикс «controller». Это подразумевает хорошее соглашение об именах, которое соблюдается в Phalcon.

По умолчанию, когда приложение создается в среде Phalcon PHP, оно включает контроллер с именем «IndexController». Этот контроллер вызывается по умолчанию для запуска действий.

Этот контроллер расширяется базой контроллеров в отличие от других контроллеров, которые расширяют \ Phalcon \ Mvc \ Controller .

Код

<?php 
class IndexController extends ControllerBase { 
   public function indexAction() { 
      echo "This is my first web application in Phalcon"; 
   } 
}

Выход

PHP Framework

Phalcon — Модели

Модель в архитектуре MVC включает логику приложения. Модель является ядром взаимодействия с базой данных. Он должен иметь возможность управлять обновлением, удалением, вставкой и извлечением записей в соответствии с запросом пользователя.

Для понимания взаимодействия модели в среде Phalcon PHP необходимо выполнить следующие шаги.

Шаг 1 — Создание базы данных.

Для любого программного стека LAMP, WAMP, XAMPP довольно просто создать базу данных с помощью инструмента базы данных phpmyadmin .

Ниже приведен SQL-запрос для создания базы данных.

create database <database-name> 

Шаг 2 — В разделе phpmyadmin перейдите на вкладку Базы данных, укажите имя базы данных и нажмите кнопку «Создать», как показано на следующем снимке экрана.

PHPMyAdmin

Шаг 3 — После успешного создания базы данных создайте таблицу, которая поможет ее объединению для создания модели в платформе Phalcon.

Используйте следующий запрос для создания новой таблицы с именем «users».

DROP TABLE IF EXISTS `users`;  

CREATE TABLE `users` ( 
   `id` int(11) NOT NULL AUTO_INCREMENT, 
   `name` varchar(25), 
   `emailid` varchar(50), 
   `contactNumber` number 
   PRIMARY KEY (`id`) 
) 
ENGINE = InnoDB DEFAULT CHARSET = utf8; 

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

Таблица создана

Шаг 4 — Чтобы создать модель, связанную с таблицей «Пользователи», которую мы создали на предыдущем шаге, откройте экземпляр командной строки. Важно перенаправить на соответствующий путь проекта. Перед этим важно проверить, правильно ли настроена конфигурация базы данных, как показано на следующем снимке экрана.

пользователи

Шаг 5 — Используйте следующую команду для создания любой модели в платформе Phalcon.

phalcon model <model-name> 

Ниже приведены результаты выполнения вышеуказанной команды.

Результат

Это означает, что модель была успешно создана.

Шаг 6 — Модель, созданная успешно, присутствует в папке моделей. Используйте следующий путь, чтобы посмотреть, где создается модель.

C:\xampp\htdocs\demo1\app\models 

Ниже приведен полный код для Users.php .

<?php  

class Users extends \Phalcon\Mvc\Model {
   /**      
      *      
      * @var integer 
      * @Primary 
      * @Identity
      * @Column(type = "integer", length = 11, nullable = false)      
   */      

   public $id; 
   /**
      *
      * @var string
      * @Column(type = "string", length = 25, nullable = true)      
   */ 

   public $name; 
   /**
      *
      * @var string
      * @Column(type = "string", length = 50, nullable = true)
   */      

   public $emailid; 
   /**
      *
      * @var integer
      * @Column(type = "integer", length = 11, nullable = true)
   */      

   public $contactNumber; 
   /**
      * Returns table name mapped in the model.
      *
      * @return string
   */      

   public function getSource() {
      return 'users';
   }  
   /**
      * Allows to query a set of records that match the specified conditions
      *
      * @param mixed $parameters
      * @return Users[]
   */ 

   public static function find($parameters = null) { 
      return parent::find($parameters);
   }  
   /**
      * Allows to query the first record that match the specified conditions
      *
      * @param mixed $parameters
      * @return Users
   */   
   
   public static function findFirst($parameters = null) {
      return parent::findFirst($parameters);
   } 
}

Шаг 7 — Контроллер взаимодействует с моделью и представлением, чтобы получить необходимый вывод. Как и в модели, используйте следующий командный терминал для создания контроллера.

Phalcon controller <controller-name> 

При успешном выполнении вышеупомянутой команды следующий вывод.

Успешное выполнение

Ниже приведен код для UserController.php .

<?php  

class UsersController extends \Phalcon\Mvc\Controller { 
   public function indexAction() { 
      echo "Users Controller has been called"; 
   } 
}

Вывод будет отображаться, если мы нажмем следующий URL — http: // localhost / demo1 / users

Окно demo1

Phalcon — Просмотров

Представления — это информация, предоставляемая конечному пользователю. Представление можно рассматривать как веб-страницу с соответствующим отображаемым ответом. Ответ получен через контроллер, который взаимодействует с моделью.

В частности, в Phalcon представление состоит из кода Volt, PHP и HTML. Набор специальных разделителей доступен для ввода в режиме Вольт. {% …%} используется для выполнения операторов, таких как циклы for или присваивания значений, а {{…}} выводит результат выражения в шаблон.

Представления в Фальконе в основном делятся на два типа —

  • вольт
  • PHTML

вольт

Ниже приведен скриншот вывода, который мы создали для проекта demo1 в предыдущей главе.

Просмотры

Этот вывод достигается с помощью файла views / index / index.volt .

Особенности файлов Volt

  • Этот шаблон написан на языке Си и значительно быстрее по сравнению с другими языками.

  • Он включает в себя набор высокоинтегрированных компонентов, которые очень полезны в Phalcon.

  • Его также можно использовать как отдельный компонент.

  • Вольт скомпилирован в чистый код PHP.

Этот шаблон написан на языке Си и значительно быстрее по сравнению с другими языками.

Он включает в себя набор высокоинтегрированных компонентов, которые очень полезны в Phalcon.

Его также можно использовать как отдельный компонент.

Вольт скомпилирован в чистый код PHP.

Ниже приведен код для index.volt, который загружается по умолчанию для любого проекта.

<!--<div class = "page-header"> 
   <h1>Congratulations!</h1> 
</div>--> 

<p>This is my first web application in Phalcon </p> 
<!--<p>You're now flying with Phalcon. Great things are about to happen!</p>

<p>This page is located at <code>views/index/index.volt</code></p>--> 

Иерархический рендеринг

Представления в Phalcon поддерживают иерархический рендеринг, а Phalcon \ Mvc \ View используется в качестве компонента рендеринга по умолчанию. Этот компонент использует PHP в качестве движка шаблонов по сравнению с файлами VOLT, которые используют C в качестве языка шаблонов.

Эти представления должны иметь расширение .phtml . Каталог представлений по умолчанию для данного проекта состоит из следующих трех файлов:

  • Представление действия — это представление вызывается для выполнения определенного действия. Вызывается, когда выполняется действие «show».

  • Макет контроллера — это представление находится внутри папки макетов. Например, C: \ xampp \ htdocs \ demo \ app \ views \ layout . Он вызывает вызовы методов, связанные с соответствующим контроллером. Код, реализованный в макете, будет реализован по мере необходимости.

  • Основной макет — это представление макета вызовет основное действие и будет отображаться для каждого контроллера или действия в веб-приложении.

Представление действия — это представление вызывается для выполнения определенного действия. Вызывается, когда выполняется действие «show».

Макет контроллера — это представление находится внутри папки макетов. Например, C: \ xampp \ htdocs \ demo \ app \ views \ layout . Он вызывает вызовы методов, связанные с соответствующим контроллером. Код, реализованный в макете, будет реализован по мере необходимости.

Основной макет — это представление макета вызовет основное действие и будет отображаться для каждого контроллера или действия в веб-приложении.

Разница между .volt и .phtml файлами

.volt .phtml
Расширение .volt используется, когда механизм шаблонов, установленный в приложении, написан на C .phtml используется, когда механизм шаблонов — сам PHP
Может использоваться как отдельный компонент Он не может использоваться как отдельный компонент
Вольт-представления компилируются в код PHP phtml-файлы сами по себе включают PHP-код, поэтому нет необходимости компиляции в инфраструктуре Phalcon

переменные

Переменные присваиваются и изменяются в шаблоне с помощью «set».

Объявление массива

{% set fruits = ['Apple', 'Banana', 'Orange'] %} 

Объявление строки

{% set name = ”John Kennedy” %} 

Комментарии

Комментарии также могут быть добавлены в шаблон с помощью разделителей {# … #} . Весь текст внутри них просто игнорируется в конечном выводе.

{# note: this is a comment 
   {% set price = 100; %} 
#}

пример

{% set fruits = ['Apple', 'Banana', 'Orange'] %} 

<h1>Fruits</h1> 

<ul> 
   {% for fruit in fruits %} 
   <li>{{ fruit|e }}</li> 
   {% endfor %} 
</ul>  

{% set robots = ['Voltron', 'Astro Boy', 'Terminator', 'C3PO'] %}  

<ul> 
   {% for robot in robots %} 
   <li>{{ robot }}</li> 
   {% endfor %} 
</ul>

Выход

Код выдаст следующий экран вывода —

Экран вывода

Phalcon — Маршрутизация

Компонент маршрутизатора позволяет определять маршруты, которые сопоставляются с контроллерами или обработчиками, которые должны получить запрос. Маршрутизатор анализирует URI в соответствии с полученной информацией.

Каждый маршрутизатор в веб-приложении имеет два режима —

  • Режим MVC
  • Только для матча

Первый режим идеально подходит для работы с приложениями MVC. Ниже приведен синтаксис для определения маршрута в Phalcon.

$router = new Router();  

// Define a route 

$router->add( 
   "<URI-Name>", 
   [ 
      "controller" => "<controller-name>", 
      "action"     => "<action-name>", 
   ] 
);

пример

Для поиска по категории, давайте создадим маршрут в rout.php в папке config.

Маршруты

Подумайте о создании маршрута, который будет вызывать метод login, когда мы вызываем «UsersController» . В таком случае предлагается создать маршрут, который сопоставляет данный URL.

<?php  

$router = new Phalcon\Mvc\Router();  

$router->add('/login', array( 
   'controller' => 'users', 
   'action' => 'login', 
));
  
return $router; 

Выход

Код выдаст следующий вывод —

Код выхода

Phalcon — подключение к базе данных

В этой главе мы обсудим возможность подключения к базе данных, связанной с Phalcon.

Создание базы данных и дизайн

Мы сконцентрируемся на создании базы данных для блогов, которая будет содержать посты вместе с категориями в соответствии с записями пользователей.

Название базы данных: блог-учебник

Запрос, используемый для создания базы данных —

drop database blog-tutorial (if exists) 
create database blog-tutorial 

После создания базы данных база данных будет перечислена, как показано на следующем снимке экрана.

База данных

Phalcon использует команды для создания моделей, контроллеров и даже проектов. Посмотрим, как это работает.

Шаг 1 — Создайте проект с именем blog-tutorial.

название проекта

Шаг 2. Настройте веб-приложение, которое подключается к базе данных, которую мы создали для управления блогами.

<?php  
return new \Phalcon\Config (array ( 
   'database' => array ( 
      'adapter'  => 'Mysql', 
      'host'     => 'localhost', 
      'username' => 'root', 
      // 'dbname'   => 'blog_tutorial', 
      'password' => '', 
      'name'     => 'blog_tutorial', 
   ), 
   'application' => array ( 
      'controllersDir' => __DIR__ . '/../../app/controllers/', 
      'modelsDir'      => __DIR__ . '/../../app/models/', 
      'viewsDir'       => __DIR__ . '/../../app/views/', 
      'baseUri'        => '/blog-tutorial/', 
   ) 
)); 

Phalcon — переключение баз данных

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

PostgreSQL

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

Это может быть достигнуто с помощью следующего кода. Услуги будут включать Phalcon \ Db \ Adapter \ Pdo \ Postgresql

use Phalcon\Db\Adapter\Pdo\Postgresql;  

$config = [ 
   'host'     => 'localhost', 
   'dbname'   => 'blog_tutorial', 
   'port'     => 5432, 
   'username' => 'root', 
   'password' => '' 
];  

$connection = new Postgresql($config); 

SQLite

Для реализации соединения SQLite конфигурация должна быть расширена с помощью абстрактного класса Phalcon \ Db \ Adapter \ Pdo \ Sqlite .

<?php  
 
use Phalcon\Db\Adapter\Pdo\Sqlite;  

$connection = new Sqlite(['dbname' => '/tmp/blog_tutorial.sqlite']); 

оракул

Для реализации соединения с базой данных Oracle в Phalcon конфигурация должна быть расширена с помощью абстрактного класса Phalcon \ Db \ Adapter \ Pdo \ Oracle .

<?php  

use Phalcon\Db\Adapter\Pdo\Oracle;  

$config = array ( 
   "dbname" => "//localhost/blog_tutorial", 
   "username" => "root", 
   "password" => "" 
); 

$connection = new Phalcon\Db\Adapter\Pdo\Oracle($config); 

Phalcon — применение лесов

Скаффолдинг обычно относится к типу генерации кода, где мы указываем его на базу данных веб-приложений, что приводит к созданию базового приложения CRUD (создание, чтение, обновление, удаление).

Перед разработкой приложения CRUD важно разработать таблицы базы данных в соответствии с потребностями приложения.

Шаг 1 — Создайте приложение подмостей, которое будет включать все операции с crud.

Command: phalcon scaffold <table-name> 

подмости

Bolg-учебник

После запуска генератора скаффолдов Phalcon будут созданы файлы и папки, которые описаны в следующей таблице.

Генератор строительных лесов

Шаг 2 — Создайте страницу индекса (сочетание phtml и вольт).

Код для включения в index.phtml в папке пользователя.

<?php use Phalcon\Tag as Tag ?> 
<!DOCTYPE html> 
<html> 
   <head> 
      <meta charset = "utf-8"> 
      <title>Blog Tutorial</title> 
      <link rel = "stylesheet" type = "text/css" 
         href = "http://netdna.bootstrapcdn.com/twitter-bootstrap/2.2.1/css/bootstrapcombined.min.css"/> 
      <meta name = "viewport" content = "width = device-width, initial-scale = 1.0"> 
   </head> 
   
   <body>  
      <div class = "navbar navbar-fixed-top"> 
         <div class = "navbar-inner"> 
            <div class = "container"> 
               <a class = "btn btn-navbar" data-toggle = "collapse" datatarget = ".nav-collapse"> 
                  <span class = "icon-bar"></span> 
                  <span class = "icon-bar"></span> 
                  <span class = "icon-bar"></span> 
               </a> 
               <a class = "brand" href = "#">Blog Collection</a> 
               
               <div class = "nav-collapse"> 
                  <ul class = "nav pull-left"> 
                     <li> 
                        <?php echo Phalcon\Tag::linkTo('index', 'Home Page') ?> 
                     </li> 
                     
                     <?php if ($this->session->has('auth')) { ?> 
                        <li> 
                           <?php echo Phalcon\Tag::linkTo('posts/index', '+Posts') ?> 
                        </li> 
                     
                        <li> 
                           <?php echo Phalcon\Tag::linkTo('categories/index', '+Categories') ?> 
                        </li> 
                     
                        <li> 
                           <?php echo Phalcon\Tag::linkTo('users/logout', 'Log out') ?> 
                        </li> 
                     <?php } else { ?> 
                        <li> 
                           <?php echo Phalcon\Tag::linkTo('users/index', 'Log in') ?> 
                        </li> 
                     <?php } ?> 
                  </ul> 
               </div> 
               
            </div> 
         </div>  
      </div>
      <?php echo $this->getContent() ?>  
      
      <script src = "http://netdna.bootstrapcdn.com/twitterbootstrap/2.2.1/js/bootstrap.min.js"></script> 
   </body> 
</html> 

Стандартный файл index.volt будет содержать следующий код.

<?php echo $this->getContent() ?>  

<div align = "center">  
   <h1>Welcome!</h1>  
   <p>Welcome to the blog collection of Phalcon</p>  
</div>

Успешное выполнение приведенного выше кода приводит к следующему выводу.

Выше кода

Шаг 3 — Изменить с соответствующими моделями.

Users.php

<?php  

class Users extends \Phalcon\Mvc\Model {  
   /** 
      * @var integer 
      * 
   */ 
   
   public $id;  
   /** 
      * @var string 
      * 
   */ 
    
   public $login;  
   /** 
      * @var string 
      * 
   */ 
   
   public $password; 
   /** 
      * Initializer method for model. 
   */ 
    
   public function initialize() { 
      $this->hasMany("id", "Posts", "users_id"); 
   } 
}

Функция с именем ‘initialize’ помогает в реализации взаимосвязи между id и users_id в таблице сообщений, что означает, что у каждого уникального пользователя есть много сообщений, связанных в таблице.

Posts.php

<?php  

class Posts extends \Phalcon\Mvc\Model {  
   /** 
      * @var integer 
      * 
   */ 
   
   public $id;  
   /** 
      * @var string 
      * 
   */ 
    
   public $title;  
   /** 
      * @var string 
      * 
   */ 
   
   public $slug;  
   /** 
      * @var string 
      * 
   */ 
   
   public $content;  
   /** 
      * @var string 
      * 
   */ 
   
   public $created; 
   /** 
      * @var integer 
      * 
   */ 
   
   public $users_id;  
   /** 
      * @var integer 
      * 
   */ 
    
   public $categories_id;   
   /** 
      * Initializer method for model. 
      */ 
   
   public function initialize() { 
      $this->belongsTo("users_id", "Users", "id"); 
      $this->belongsTo("categories_id", "Categories", "id"); 
   } 
}  

Функция ‘initialize’ включает в себя ограничение отношений, упоминающее отношение внешнего ключа и первичного ключа с таблицей.

users_id ссылается на идентификатор в таблице «Пользователи».

category_id ссылается на идентификатор в таблице «Категории».

categories.php

<?php  

class Categories extends \Phalcon\Mvc\Model {  
   /** 
      * @var integer 
      * 
   */ 

   public $id;  
   /** 
      * @var string 
      * 
   */ 

   public $name;  
   /** 
      * @var string 
      * 
   */ 

   public $slug;   
   /** 
      * Initializer method for model. 
   */ 
   
   public function initialize() { 
      $this->hasMany("id", "Posts", "categories_id"); 
   } 
} 

Как и в модели «Пользователи », функция «initialize» указывает, что она включает в себя множество category_id для данного поста.

Разработка страницы входа

Создание видов

Ниже приводится полная структура проекта Blog-tutorial-master.

Полная структура

Связанное представление для отображения домашней страницы после успешного входа пользователя — «index.phtml» .

<?php use Phalcon\Tag as Tag ?> 
<!DOCTYPE html> 
<html> 
   <head> 
      <meta charset = "utf-8"> 
      <title>Blog Tutorial</title> 
      <link rel = "stylesheet" type = "text/css" href = "http://netdna.bootstrapcdn.com/twitter-bootstrap/2.2.1/css/bootstrapcombined.min.css"/> 
      <meta name = "viewport" content = "width = device-width, initial-scale = 1.0"> 
   </head> 

   <body>  
      <div class = "navbar navbar-fixed-top"> 
         <div class = "navbar-inner"> 
            <div class = "container"> 
               <a class = "btn btn-navbar" data-toggle = "collapse" datatarget = ".nav-collapse"> 
                  <span class = "icon-bar"></span> 
                  <span class = "icon-bar"></span> 
                  <span class = "icon-bar"></span> 
               </a> 
               <a class = "brand" href = "#">Blog Collection</a> 
               
               <div class = "nav-collapse"> 
                  <ul class = "nav pull-left"> 
                     <li> 
                        <?php echo Phalcon\Tag::linkTo('index', 'Home Page') ?> 
                     </li> 
                     <?php if ($this->session->has('auth')) { ?> 
                        <li> 
                           <?php echo Phalcon\Tag::linkTo('posts/index', '+Posts') ?> 
                        </li> 
                        
                        <li> 
                           <?php echo Phalcon\Tag::linkTo('categories/index', '+Categories') ?> 
                        </li> 
                        
                        <li> 
                           <?php echo Phalcon\Tag::linkTo('users/logout', 'Log out') ?> 
                        </li> 
                     <?php } else { ?> 
                        <li>
                           <?php echo Phalcon\Tag::linkTo('users/index', 'Log in') ?> 
                        </li> 
                     <?php } ?> 
                  </ul> 
               </div>
               
            </div> 
         </div>
      </div>            
      <?php echo $this->getContent() ?>  
      <script src = "http://netdna.bootstrapcdn.com/twitterbootstrap/2.2.1/js/bootstrap.min.js"></script> 
   </body> 
</html>                       

Управление категориями

Phalcon — язык запросов

Phalcon Query Language (PHQL), также называемый PhalconQL, является высокоуровневым диалектом SQL, который стандартизирует запросы SQL для систем баз данных, поддерживаемых Phalcon.

Он включает в себя синтаксический анализатор, написанный на C, который транслирует синтаксис в целевой RDBMS.

Вот список некоторых выдающихся особенностей языка запросов Phalcon:

  • Для безопасности веб-приложения оно использует связанные параметры.

  • Таблицы обрабатываются как модели, а столбцы — как атрибуты класса.

  • Все операторы манипулирования данными используются для предотвращения потери данных, которая может произойти.

  • Внедрение SQL предотвращается сохранением вызова SQL-запроса по одному.

Для безопасности веб-приложения оно использует связанные параметры.

Таблицы обрабатываются как модели, а столбцы — как атрибуты класса.

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

Внедрение SQL предотвращается сохранением вызова SQL-запроса по одному.

Создание запроса PHQL

Запросы создаются путем создания экземпляра класса Phalcon \ Mvc \ Model \ Query .

пример

// Instantiate the Query 
$query = new Query( 
   "SELECT * FROM Users", 
   $this->getDI() 
);  

// Execute the query returning a result if any 
$cars = $query->execute(); 

В предыдущих главах мы видели работу веб-приложения scaffold под названием блог-учебник. Это включало поиск категорий по имени или слагу.

Ниже приведен код, включенный для searchAction.

public function searchAction() {  
   $numberPage = 1; 
   if ($this->request->isPost()) { 
      $query = Criteria::fromInput($this->di, "Categories", $_POST); 
      $this->session->conditions = $query->getConditions(); 
   } else { 
      $numberPage = $this->request->getQuery("page", "int"); 
      if ($numberPage <= 0) { 
         $numberPage = 1; 
      } 
   } 
   
   $parameters = array(); 
   if ($this->session->conditions) { 
      $parameters["conditions"] = $this->session->conditions; 
   } 
   
   // $parameters["order"] = "id"; 
   $categories = Categories::find($parameters); 
   if (count($categories) == 0) { 
      $this->flash->notice("The search did not find any categories"); 
      
      return $this->dispatcher->forward(array( 
         "controller" => "categories", 
         "action" => "index" 
      )); 
   } 
   
   $paginator = new \Phalcon\Paginator\Adapter\Model(array( 
      "data" => $categories, 
      "limit"=> 10, 
      "page" => $numberPage 
   )); 
   
   $page = $paginator->getPaginate(); 
   $this->view->setVar("page", $page); 
}

Запрос PHQL, выполненный (выделенный) в контроллере, извлечет все результаты согласно условию поиска. Результат любого поискового запроса согласно условию будет отображаться как на скриншоте.

Ниже приведены результаты, полученные при успешном выполнении вышеуказанного кода.

PHQL

PHQL Жизненный цикл

Будучи языком высокого уровня, PHQL предоставляет разработчикам возможность персонализировать и настраивать различные аспекты в соответствии с требованиями.

Ниже приводится жизненный цикл каждого оператора PHQL, выполняемого в Phalcon.

  • Каждый оператор PHQL анализируется и преобразуется в промежуточное представление (IR), которое полностью не зависит от SQL, реализованного системой базы данных.

  • IR преобразуется в оператор SQL согласно системе баз данных, которая используется в веб-приложении. Сгенерированные операторы SQL связаны с моделью.

  • Все операторы PHQL анализируются один раз и кэшируются в памяти. Если выполняется тот же результат оператора, это поможет повысить производительность.

Каждый оператор PHQL анализируется и преобразуется в промежуточное представление (IR), которое полностью не зависит от SQL, реализованного системой базы данных.

IR преобразуется в оператор SQL согласно системе баз данных, которая используется в веб-приложении. Сгенерированные операторы SQL связаны с моделью.

Все операторы PHQL анализируются один раз и кэшируются в памяти. Если выполняется тот же результат оператора, это поможет повысить производительность.

Жизненный цикл

Phalcon — миграция базы данных

Перенос базы данных важен по следующим причинам:

  • Перенос базы данных помогает переносить данные между указанными типами хранилищ.

  • Миграция базы данных относится к контексту миграции веб-приложений с одной платформы на другую.

  • Этот процесс обычно выполняется для отслеживания устаревших данных.

Перенос базы данных помогает переносить данные между указанными типами хранилищ.

Миграция базы данных относится к контексту миграции веб-приложений с одной платформы на другую.

Этот процесс обычно выполняется для отслеживания устаревших данных.

Phalcon выполняет процесс миграции базы данных следующим образом —

Шаг 1 — Создайте проект с именем «dbProject» в каталоге xampp / wamp .

dbproject

Шаг 2 — Настройте проект с соответствующим подключением к базе данных.

<?php 

/*  
   * Modified: preppend directory path of current file, 
      because of this file own different ENV under between Apache and command line.  
   * NOTE: please remove this comment.  
*/

defined('BASE_PATH') || define('BASE_PATH', getenv('BASE_PATH') ?: realpath(dirname(__FILE__) . '/../..')); 
defined('APP_PATH') || define('APP_PATH', BASE_PATH . '/app');  
return new \Phalcon\Config(['database' => [
   'adapter' => 'Mysql', 
   'host' => 'localhost', 
   'username' => 'root', 
   'password' => '', 
   'dbname' => 'demodb', 
   'charset' => 'utf8', ],

'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' => '/dbProject/', 
] ]); 

Шаг 3 — Выполнить команду для миграции таблиц, входящих в базу данных «demodb». На данный момент он включает в себя одну таблицу «пользователи».

ДЕМОДВ

Шаг 4 — Переносимые файлы базы данных хранятся в каталоге миграции в папке «app».

user.php

Таким образом, таблицы успешно перенесены.

Понимание анатомии перенесенных файлов

У перенесенного файла есть уникальный класс, который расширяет класс Phalcon \ Mvc \ Model \ Migration . Класс Migration в Phalcon включает методы up () и down () . Метод up () используется для выполнения миграции, в то время как метод down выполняет откат операции.

Users.php

<?php  

use Phalcon\Db\Column; 
use Phalcon\Db\Index; 
use Phalcon\Db\Reference; 
use Phalcon\Mvc\Model\Migration;  

/**  
   * Class UserMigration_100  
*/ 

class UserMigration_100 extends Migration {     
   /**      
      * Define the table structure      
      *      
      * @return void 
   */      
   public function morph() { 
      $this->morphTable('user', [ 
         'columns' => [ 
            new Column( 'Id', [ 
               'type' => Column::TYPE_INTEGER, 
               'notNull' => true, 
               'autoIncrement' => true, 
               'size' => 11, 'first' => true ] ), 
            new Column( 'username', [ 
               'type' => Column::TYPE_VARCHAR, 
               'notNull' => true, 
               'size' => 40, 
               'after' => 'Id' ] ), 
            new Column( 'email', [ 
               'type' => Column::TYPE_VARCHAR, 
               'notNull' => true, 
               'size' => 40, 
               'after' => 'username' ] ), 
            new Column( 'password', [ 
               'type' => Column::TYPE_VARCHAR, 
               'notNull' => true, 
               'size' => 10, 
               'after' => 'email' ] ) 
         ],  
         'indexes' => [new Index('PRIMARY', ['Id'], 'PRIMARY') ], 
            'options' => [ 'TABLE_TYPE' => 'BASE TABLE', 
               'AUTO_INCREMENT' => '3', 'ENGINE' => 'InnoDB', 
               'TABLE_COLLATION' => 'latin1_swedish_ci' ], 
      ] ); 
   }  
   
   /**      
      * Run the migrations      
      *      * @return void      
   */     

   public function up() {  
   }  

   /**      
      * Reverse the migrations      
      *
      * @return void      
   */
   public function down() {  
   } 
}               

Класс UserMigration_100, как показано в примере выше, включает в себя ассоциативный массив с четырьмя разделами, которые:

  • Столбцы — включает набор столбцов таблицы.

  • Индексы — включает в себя набор табличных индексов.

  • Ссылки — Включает все ограничения ссылочной целостности (внешний ключ).

  • Параметры — Массив с набором параметров создания таблицы.

Столбцы — включает набор столбцов таблицы.

Индексы — включает в себя набор табличных индексов.

Ссылки — Включает все ограничения ссылочной целостности (внешний ключ).

Параметры — Массив с набором параметров создания таблицы.

Как видно из приведенного выше примера, база данных версии 1.0.0 успешно перенесена. Phalcon может включать и запускать несколько процессов миграции в зависимости от того, как хранится содержимое базы данных.

Phalcon — Управление cookie

Файлы cookie, также известные как файлы cookie браузера, представляют собой небольшие текстовые файлы, хранящиеся в браузере. Сохраняет всю информацию, связанную с идентификацией пользователя. Эта информация используется для проверки пользователей, когда они просматривают разные страницы.

Есть два разных типа файлов cookie —

  • Сеансовые cookie-файлы. Эти типы cookie-файлов остаются в браузере и сохраняют информацию до тех пор, пока браузер не будет закрыт. Как только браузер откроется, он будет рассматриваться как новый сеанс для того же пользователя.

  • Постоянные файлы cookie — они включают в себя установленную продолжительность жизни и остаются в браузере в течение заданной продолжительности жизни. Те веб-сайты, которые используют постоянные файлы cookie, отслеживают каждого пользователя, даже если браузер закрыт пользователем.

Сеансовые cookie-файлы. Эти типы cookie-файлов остаются в браузере и сохраняют информацию до тех пор, пока браузер не будет закрыт. Как только браузер откроется, он будет рассматриваться как новый сеанс для того же пользователя.

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

Давайте теперь обсудим, как куки работают в Phalcon.

Печенье в Фальконе

Phalcon использует Phalcon \ Http \ Response \ Cookies в качестве глобального хранилища для файлов cookie. Файлы cookie хранятся в Phalcon при отправке запроса на сервер.

Ниже приведен синтаксис для настройки Cookie —

$this->cookies->set( 
   "<cookie-name>", 
   "<cookie-value>", 
   time 
); 

Рассмотрим следующий пример. Используя следующий код, мы создадим куки пользователя, когда пользователь войдет в веб-приложение.

<?php  

class UsersController extends \Phalcon\Mvc\Controller { 
   public function indexAction() { 
      if ($this->cookies->has("login-action")) { 
         // Get the cookie 
         $loginCookie = $this->cookies->get("login-action"); 
         
         // Get the cookie's value 
         $value = $loginCookie->getValue(); 
         echo($value); 
      } 
      $this->cookies->set( 
         "login-action", 
         "abc", 
         time() + 15 * 86400 
      ); 
   } 
}            

Зашифрованные куки будут отображаться как выходные данные.

Отображаемый вывод

Описание

Файл cookie с именем «loginAction» был создан со значением «abc» .

Метод indexAction проверяет, существует ли cookie, и печатает значение соответствующим образом.

Шифрование файлов cookie

Файлы cookie в Phalcon шифруются перед отправкой на сервер в качестве запроса и расшифровываются, как только мы получаем соответствующий ответ от сервера. Это обеспечивает безопасность авторизованных пользователей.

Всегда рекомендуется избегать хранения конфиденциальных данных в файлах cookie, несмотря на функции шифрования и дешифрования. Конфигурация для шифрования файлов cookie включена в файл services.php .

Шифрование

/** 
   * Enable encryption key for setting values of cookies 
*/  

$di->set( 
   "cookies", function () { 
      $cookies = new Cookies();  
      $cookies->useEncryption(false);  
      return $cookies; 
   } 
); 

/** 
   * Set encryption key 
*/ 

$di->set( 
   "crypt", function () { 
      $crypt = new Crypt(); 
      $crypt->setKey('AED@!sft56$'); // Use a unique Key!  
      return $crypt; 
   } 
);      

Примечание

  • Всегда рекомендуется использовать шифрование при отправке куки на сервер.

  • Если шифрование не используется, все внутреннее приложение будет открыто для злоумышленника.

  • Также рекомендуется хранить небольшие данные и литералы в куки.

Всегда рекомендуется использовать шифрование при отправке куки на сервер.

Если шифрование не используется, все внутреннее приложение будет открыто для злоумышленника.

Также рекомендуется хранить небольшие данные и литералы в куки.

Phalcon — Управление сессиями

Сеансы — это хранилище информации на стороне сервера, которое помогает пользователю взаимодействовать с веб-сайтом или веб-приложением. Каждый сеанс уникальным образом определяется идентификатором сеанса, который передается веб-серверу всякий раз, когда браузер выполняет HTTP-запрос. Идентификатор сеанса каждый раз связывается с внутренней базой данных, так что все сохраненные переменные извлекаются.

Сессии в Фальконе

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

Ниже приведены функции в Phalcon —

  • Данные сеанса могут быть изолированы от других компонентов в том же домене.

  • В зависимости от потребностей приложения значение сеанса может быть изменено с помощью адаптера сеанса.

Данные сеанса могут быть изолированы от других компонентов в том же домене.

В зависимости от потребностей приложения значение сеанса может быть изменено с помощью адаптера сеанса.

Начиная сессию в Phalcon

Все действия сеанса связаны с файлами адаптера, которые объявлены в файле Services.php в папке / config веб-приложения.

/** 
   * Start the session the first time some component requests the session service 
*/ 
$di->setShared('session', function () { 
   $session = new SessionAdapter(); 
   $session->start();  
   return $session; 
});

Создание сеанса

Шаг 1 — Создайте контроллер сеанса для создания экземпляра сеанса, чтобы данные могли быть получены соответствующим образом.

Командная строка

Шаг 2 — Создайте сеанс с именем и значением.

<?php  

class SessionController extends \Phalcon\Mvc\Controller { 
   public function indexAction() { 
      //Define a session variable 
      $this->session->set("user-name", "Omkar"); 
      
      //Check if the variable is defined 
      if ($this->session->has("user-name")) { 
         //Retrieve its value 
         $name = $this->session->get("user-name"); 
         echo($name); 
      } 
   } 
} 

Приведенный выше код производит следующий вывод.

Код

Удаление сеанса

Возможно уничтожить сеанс или сбросить некоторые значения переменных внутри сеанса в Phalcon.

Ниже приведен синтаксис для сброса значений переменных в сеансе.

$this->session->remove(<variable-name>); 

Как показано в примере выше, имя переменной, созданной в сеансе, представляет собой «data-content», которое можно удалить с помощью следующего кода.

public function removeAction() { 
   // Remove a session variable with associated session 
   $this->session->remove("data-content"); 
}

;

Ниже приводится синтаксис для уничтожения всего сеанса.

$this->session->destroy(); 

Phalcon — многоязычная поддержка

Phalcon включает в себя компонент Phalcon \ Translate, который обеспечивает многоязычную поддержку, и это очень полезно для создания веб-страниц, которые переводятся на несколько языков.

Он включает в себя адаптер, который помогает связывать массивы и помогает читать сообщения перевода.

пример

Давайте создадим вывод с помощью компонента Translate в Phalcon, который поможет отобразить вывод в соответствии с предлагаемым языком.

Шаг 1 — Phalcon дает свободу каждому разработчику в организации строк перевода. Попробуйте сохранить два разных файла, а именно: en.php (для английских строк) и fr.php (для французских строк).

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

В файле En.php

<?php  

// app/messages/en.php 

$messagesContent = [ 
   "bye"     => "Good Bye", 
   "hi-name" => "Hello %name%", 
   "song"    => "Your favorite song is %song%", 
]; 

fr.php

<?php 

// app/messages/fr.php 

$messagesContent = [ 
   "bye"        => "Au revoir", 
   "hello-name" => "Bonjour %name%", 
   "song"       => "Votre chanson préférée est %song%", 
]; 

Шаг 2 — В приложении создайте UserController, который будет принимать параметры относительно того, какой файл должен использоваться для перевода.

<?php 

use Phalcon\Translate\Adapter\NativeArray; 

class UserController extends \Phalcon\Mvc\Controller {  
   protected function getMessageTransalation() { 
      // Ask for the best language 
      // Display the output in desired language 
      require "en.php";   
      
      // Return a translation object 
      return new NativeArray( ["content" => $messagesContent,]); 
   }  
   public function indexAction() { 
      $this->view->name = "Radhika"; 
      $this->view->song= "Ton sourire m'ensorcelle Je suis fou de toi Le désir coule dans mes veines Guidé par ta voix"; 
      $this->view->t    = $this->getMessageTransalation(); 
   } 
}   

Для метода по умолчанию используются два параметра: первый — имя, а второй — любимая песня пользователя. Позже вызывается функция getMessageTranslation , которая возвращает желаемый результат.

Сейчас мы хотим вывод на английском языке.

Шаг 3Демо связанного представления кода \ app \ views \ User \ index.volt будет включать следующий код —

<p><?php echo $t->_("hello-name", ["name" => $name]); ?></p> 
<p><?php echo $t->_("song", ["song" => $song]); ?></p> 

Индекс

Если мы хотим, чтобы весь вывод отображался на французском языке, нам нужно только изменить имя файла.

require "fr.php"; 

Ниже приводится вывод на французском языке.

Выход на французский

Phalcon — Управление активами

Активы — все о дополнительных компонентах кроме существующей структуры в Phalcon. В Phalcon есть менеджер активов, который помогает управлять всеми компонентами активов, такими как файлы CSS или JS.

Общие используемые методы —

метод значение
__construct (переменная $ options) Инициализирует компонент Phalcon \ Assets \ Manager
addCss (строка $ path, переменная $ local, переменная $ filter, переменная $ attribute) Добавляет ресурс CSS из коллекции ‘css’ в определенный вид
addJs (строка $ path, переменная $ local, переменная $ filter, переменная $ attribute) Добавляет ресурс JavaScript в коллекцию ‘js’

пример

Рассмотрим пример проекта Phalcon «vokuro», который является лучшей иллюстрацией для добавления файлов CSS . Он будет включать активы / Manager для вызова всех файлов CSS .

Контроллер по умолчанию для проекта вызовет все файлы CSS .

<?php 

namespace Vokuro\Controllers; 
use Phalcon\Assets\Manager;  

/** 
   * Display the default index page. 
*/ 

class IndexController extends ControllerBase {  
   /** 
      * Default action. Set the public layout (layouts/public.volt) 
   */ 
   public function indexAction() { 
      $this->assets->addCss("public/style.css"); 
      $this->view->setVar('logged_in', is_array($this->auth->getIdentity())); 
      $this->view->setTemplateBefore('public'); 
   } 
}

style.css

div.remember { 
   margin-top: 7px; 
   color: #969696; 
}  
div.remember label { 
   padding-top: 15px; 
}  
div.forgot { 
   margin-top: 7px; 
   color: #dadada; 
}  
footer { 
   background: url("../img/feature-gradient.png") no-repeat scroll center 100% white; 
   color: #B7B7B7; 
   font-size: 12px; 
   padding: 30px 0; 
   text-align: center; 
}  
footer a { 
   margin-left: 10px; 
   margin-right: 10px; 
}  
table.signup td { 
   padding: 10px; 
}  
table.signup .alert { 
   margin-bottom: 0; 
   margin-top: 3px; 
}  
table.perms select { 
   margin-top: 5px; 
   margin-right: 10px; 
}  
table.perms label { 
   margin-right: 10px; 
}  
div.main-container { 
   min-height: 450px; 
} 

Активами будут управлять внутри представлений, которые будут отображать CSS-файлы в качестве вывода.

Index.volt

{{ content() }} 
{{ assets.outputCss() }} 

<header class = "jumbotron subhead" id = "overview"> 
   <div class = "hero-unit"> 
      <h1>Welcome!</h1> 
      <p class = "lead">This is a website secured by Phalcon Framework</p> 
      <div align = "right"> 
         {{ link_to('session/signup', '<i class="icon-ok icon-white">
            </i> Create an Account', 'class': 'btn btn-primary btn-large') }} 
      </div> 
   </div> 
</header> 

Выход

Это даст следующий результат —

Произведенный выход

Phalcon — Работа с формами

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

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

Рассмотрим пример Blog-tutorial, который мы создали в предыдущих главах. Он включает в себя форму, которая используется для создания новой категории.

<?php echo \Phalcon\Tag::form(array("categories/create", "autocomplete" => "off")) ?>  
   <table width = "100%"> 
      <tr> 
         <td align = "left">
            <?php echo \Phalcon\Tag::linkTo(array("categories", "Go Back", "class" => "btn")) ?>
         </td> 
         <td align = "right"><
            ?php echo \Phalcon\Tag::submitButton(array("Save", "class" => "btn")) ?>
         </td> 
      <tr> 
   </table>  
   
   <?php echo $this->getContent(); ?>  
   
   <div align = "center"> 
      <h1>Create categories</h1> 
   </div>  
   <table align = "center"> 
      <tr> 
         <td align = "right"> 
            <label for = "name">Name</label> 
         </td> 
         <td align = "left"> 
            <?php echo \Phalcon\Tag::textField(array("name", "size" => 30)) ?> 
         </td> 
      </tr> 
     
      <tr> 
         <td align = "right"> 
            <label for = "slug">Slug</label> 
         </td> 
         <td align = "left"> 
            <?php echo \Phalcon\Tag::textField(array("slug", "size" => 30)) ?> 
         </td> 
      </tr> 
   </table> 
</form>

Вывод. Будет получен следующий вывод.

Создать Категории

Поля ввода формы отображаются с помощью компонента Phalcon / tag . Каждый элемент в форме может быть представлен в соответствии с требованием разработчика.

Ниже приводится синтаксис для визуализации значения.

echo $form->render(element-name)

Проверка

Как только значения будут отображены в контроллере, они будут введены в базу данных с помощью моделей. Формы Phalcon интегрированы с компонентом проверки для обеспечения мгновенной проверки. Встроенные или пользовательские валидаторы могут быть установлены для каждого элемента.

<?php  
use Phalcon\Forms\Element\Text; 
use Phalcon\Validation\Validator\PresenceOf; 
use Phalcon\Validation\Validator\StringLength;  

$name = new Text( 
   "Name" 
); 

$name->addValidator( 
   new PresenceOf([ "message" => "name is required", ]) 
); 

$form->add($name); 

Вывод. Будет получен следующий вывод.

Следующий вывод

Phalcon — объект документа Mapper

Прежде чем начать с концепций Object Relational Mapper (ORM) и Object Document Mapper (ODM), важно понять разницу между базами данных SQL и NoSQL.

В следующей таблице приведены различия между SQL и NoSQL.

SQL NoSQL
Они также называются реляционными базами данных (RDBMS) Они называются нереляционной или распределенной базой данных.
Структура базы данных состоит из таблиц и представлений Он состоит из баз документов и графических баз данных.
Включает предопределенную схему Имеет динамическую схему
Это очень мощный инструмент для определения и обработки данных Это мощный в поддержании данных как сбор документов

Phalcon имеет возможность сопоставления с базами данных SQL и NoSQL. Это достигается с помощью Object Document Mapper (ODM) для базы данных NoSQL и Object Relational Mapper (ORM) для базы данных SQL.

В Phalcon концепция ORM заключается в создании модели, связанной с данным именем таблицы, как мы видели в предыдущих главах. Он следует всем ограничениям ссылочной целостности.

Картографирование объектных документов (ODM)

Это объект, связанный с базой данных NoSQL. Как следует из названия, он отображает связанный с документом модуль. Phalcon использует его для сопоставления с базами данных, такими как MongoDB.

пример

Шаг 1 — Создайте базу данных MongoDB с именем «test» . Мы будем использовать эту базу данных для сопоставления и получения соответствующего ответа.

Тестовое задание

Монго

Шаг 2 — Проверьте наличие вставленных записей в базе данных. Команда, связанная с этим —

db.collection.find() 

Вставленные записи

Замечено, что каждый документ отображается с ObjectId, который является функцией ODM. Значение ObjectId является уникальным и впоследствии используется для извлечения всех данных, хранящихся в отношении этого конкретного Id.

Шаг 3 — Настройте модель для созданной базы данных. Модель — это класс, который расширяет Phalcon \ Mvc \ Collection . Модель test.php будет включать следующий код.

<?php 
use Phalcon\Mvc\Collection;  

class Test extends Collection { 
   public function initialize() { 
      $this->setSource("test"); 
   } 
} 

Шаг 4 — Настройте проект, включая подключение к базе данных в services.php .

// Simple database connection to localhost 

$di->set( 
   "mongo", 
   function () { 
      $mongo = new MongoClient();  
      return $mongo->selectDB("test"); 
   }, 
   true 
); 

// Connecting to a domain socket, falling back to localhost connection 

$di->set( 
   "mongo", 
   function () { 
      $mongo = new MongoClient( 
         "mongodb:///tmp/mongodb-27017.sock,localhost:27017" 
      );  
      return $mongo->selectDB("test"); 
   }, 
   true 
);

Шаг 5 — Распечатайте значения относительно ObjectId с помощью TestController.php .

<?php  

use Phalcon\Mvc\Controller;  

class TestController extends Controller { 
   public function index() { 
      // Find record with _id = "5087358f2d42b8c3d15ec4e2" 
      $test = Test::findById("5819ab6cfce9c70ac6087821"); 
      echo $test->data; 
   } 
} 

Выходные данные будут отображать данные, которые соответствуют objectId. Если objectId не соответствует в соответствии с записями в документах, то соответствующий вывод не будет отображаться при получении количества записей.

Отображение данных

Phalcon — Функции безопасности

Phalcon предоставляет функции безопасности с помощью компонента Security, который помогает выполнять определенные задачи, такие как хеширование паролей и подделка межсайтовых запросов (CSRF).

Хеширование пароля

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

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

Phalcon предоставляет простой способ хранения паролей в зашифрованном виде, который следует алгоритму, подобному md5, base64 или sh1 .

Как видно из предыдущих глав, где мы создали проект для блогов. Экран входа в систему принимает ввод в качестве имени пользователя и пароля для пользователя. Чтобы получить пароли от пользователя и расшифровать его в определенной форме, используется следующий фрагмент кода.

Затем расшифрованный пароль сопоставляется с паролем, принятым в качестве ввода от пользователя. Если значение совпадает, пользователь может успешно войти в веб-приложение, иначе появится сообщение об ошибке.

<?php  
class UsersController extends Phalcon\Mvc\Controller {  
   public function indexAction() {  
   }  
   public function registerUser() { 
      $user = new Users();  
      $login    = $this->request->getPost("login"); 
      $password = $this->request->getPost("password");
      $user->login = $login;  
      
      // Store the hashed pasword 
      $user->password = $this->security->sh1($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' => 'posts', 
         'action' => 'index' 
      )); 
   }  
   public function logoutAction() { 
      $this->session->remove('auth'); 
      return $this->dispatcher->forward(array( 
         'controller' => 'posts', 
         'action' => 'index' 
      )); 
   }  
}     

Пароли хранятся в базе данных в зашифрованном формате алгоритма sh1 .

пароль

Как только пользователь вводит соответствующее имя пользователя и пароль, он может получить доступ к системе, в противном случае в качестве проверки отображается сообщение об ошибке.

Проверка

Подделка межсайтовых запросов (CSRF)

Это атака, которая заставляет аутентифицированных пользователей веб-приложения выполнять определенные нежелательные действия. Формы, которые принимают входные данные от пользователей, уязвимы для этой атаки. Phalcon пытается предотвратить эту атаку, защищая данные, которые отправляются через формы вне приложения.

Данные в каждой форме защищены с помощью генерации токенов. Генерируемый токен является случайным и соответствует токену, на который мы отправляем данные формы (в основном вне веб-приложения методом POST).

Код:

<?php echo Tag::form('session/login') ?>  
   <!-- Login and password inputs ... -->  
   <input type = "hidden" name = "<?php echo $this->security->getTokenKey() ?>" 
      value = "<?php echo $this->security->getToken() ?>"/>  
</form> 

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

Включите сессионный адаптер в services.php, используя следующий код.