Учебники

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

FuelPHP — Введение

FuelPHP — это платформа веб-приложений с открытым исходным кодом. Он написан на PHP 5.3 и реализует шаблон HMVC. HMVC — это иерархическая структура Model-View-Controller, которая позволяет выполнять субзапрос контроллера, который возвращает частичную страницу, такую ​​как комментарии, меню и т. Д., Вместо полной страницы, как в обычном MVC.

FuelPHP создан с целью включить лучшие практики из таких фреймворков, как CodeIgniter и Kohana, с улучшениями и собственными идеями. Инструмент переноса базы данных FuelPHP и функциональные возможности лесов созданы на основе популярной платформы Ruby on Rails .

  • FuelPHP использует мощность командной строки через утилиту под названием «Нефть» . Утилита предназначена для ускорения разработки, повышения эффективности, тестирования, отладки и поддержки HTML.

  • FuelPHP — это чисто объектно-ориентированный подход. Его архитектура основана на идее модульности. Приложения могут быть разделены на модули, и каждый компонент может быть расширен или заменен без перезаписи одной строки кода. Fuel поддерживает любой анализатор шаблонов, такой как Smarty, Twig, PHPTal и т. Д. Для анализа представлений.

  • Сообщество FuelPHP большое и активно участвует в нем более 300 участников. Его большое сообщество регулярно создает и улучшает пакеты и расширения. Основная цель инфраструктуры FuelPHP — обеспечить гибкость и совместимость. Это быстрое, простое в освоении и полное решение для разработки веб-приложений.

  • Что делает FuelPHP одной из главных платформ, используемых разработчиками PHP, так это то, что — новая версия FuelPHP обратно совместима с его старыми версиями благодаря стабильному API. Это очень гибкий.

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

FuelPHP использует мощность командной строки через утилиту под названием «Нефть» . Утилита предназначена для ускорения разработки, повышения эффективности, тестирования, отладки и поддержки HTML.

FuelPHP — это чисто объектно-ориентированный подход. Его архитектура основана на идее модульности. Приложения могут быть разделены на модули, и каждый компонент может быть расширен или заменен без перезаписи одной строки кода. Fuel поддерживает любой анализатор шаблонов, такой как Smarty, Twig, PHPTal и т. Д. Для анализа представлений.

Сообщество FuelPHP большое и активно участвует в нем более 300 участников. Его большое сообщество регулярно создает и улучшает пакеты и расширения. Основная цель инфраструктуры FuelPHP — обеспечить гибкость и совместимость. Это быстрое, простое в освоении и полное решение для разработки веб-приложений.

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

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

FuelPHP — Особенности

FuelPHP предлагает множество функций для создания полноценного веб-приложения. Он предоставляет гибкие компоненты, простую настройку, простой в использовании ORM, режим разработки приложений на основе REST и т. Д. Ниже приведены некоторые важные функции:

  • Гибкая и управляемая сообществом веб-структура
  • Прост в настройке и использовании
  • FuelPHP чрезвычайно портативен, работает практически на любом сервере
  • Гибкая система маршрутизации URI
  • FuelPHP обеспечивает поддержку разработки RESTful API
  • Легкая модель ORM
  • Фильтрация ввода и предотвращение внедрения SQL
  • Безопасная структура аутентификации и авторизации
  • Код многоразовый и простой в обслуживании
  • Автозагрузка классов, управление сессиями и обработка исключений.

FuelPHP — Преимущества

FuelPHP — это элегантная среда HMVC PHP 5.3, которая предоставляет набор компонентов для создания веб-приложений со следующими преимуществами:

  • Модульная структура — Fuel не заставляет вас использовать модули или файловую структуру HMVC. Если вы хотите использовать, процесс довольно легко интегрировать. Приложения FuelPHP создаются в виде модульной структуры и становятся проще для разработчиков с явными преимуществами.

  • Шаблон HMVC . Наиболее важной особенностью этой платформы является HMVC (контроллер представления иерархической модели), который позволяет легко получать доступ или использовать любые свойства, методы класса, функции, файлы на более высоком уровне.

  • Функция безопасного хеширования — FuelPHP поддерживает надежные инструменты криптографии и методы хэширования паролей. Он обрабатывает шифрование, дешифрование и хеширование с помощью мощного PHPSecLib.

  • Функциональность скаффолдинга. Скаффолдинг — это метод метапрограммирования для построения операций базы данных. Топливные леса довольно просты. Это позволяет вам получить базовое приложение CRUD с очень простыми шагами.

Модульная структура — Fuel не заставляет вас использовать модули или файловую структуру HMVC. Если вы хотите использовать, процесс довольно легко интегрировать. Приложения FuelPHP создаются в виде модульной структуры и становятся проще для разработчиков с явными преимуществами.

Шаблон HMVC . Наиболее важной особенностью этой платформы является HMVC (контроллер представления иерархической модели), который позволяет легко получать доступ или использовать любые свойства, методы класса, функции, файлы на более высоком уровне.

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

Функциональность скаффолдинга. Скаффолдинг — это метод метапрограммирования для построения операций базы данных. Топливные леса довольно просты. Это позволяет вам получить базовое приложение CRUD с очень простыми шагами.

Следующие популярные продукты используют FuelPHP Framework —

  • Matic Technology — глобальный поставщик оффшорных решений для разработки программного обеспечения. В компании Matic Technologies они предоставляют все наилучшие возможные решения посредством FuelPHP в соответствии с требованиями клиента.

  • Kroobe — Kroobe — социальная сеть объявлений. Fuel предлагает чрезвычайно низкие затраты на разработку и услуги для команды Kroobe для достижения эффективного решения.

Matic Technology — глобальный поставщик оффшорных решений для разработки программного обеспечения. В компании Matic Technologies они предоставляют все наилучшие возможные решения посредством FuelPHP в соответствии с требованиями клиента.

Kroobe — Kroobe — социальная сеть объявлений. Fuel предлагает чрезвычайно низкие затраты на разработку и услуги для команды Kroobe для достижения эффективного решения.

FuelPHP — Установка

В этой главе объясняется, как установить FuelPHP framework на ваш компьютер. Установка FuelPHP очень проста и легка. У вас есть два способа создания приложений FuelPHP —

  • Первый метод — установка из командной строки с использованием инструмента FuelPHP под названием Oil .

  • Второй способ — установка на основе Composer . FuelPHP использует Composer , как для установки, так и для зависимостей пакетов, поэтому убедитесь, что композитор установлен локально, прежде чем продолжить процесс.

Первый метод — установка из командной строки с использованием инструмента FuelPHP под названием Oil .

Второй способ — установка на основе Composer . FuelPHP использует Composer , как для установки, так и для зависимостей пакетов, поэтому убедитесь, что композитор установлен локально, прежде чем продолжить процесс.

Давайте подробно рассмотрим каждый из этих методов в последующих разделах.

Системные Требования

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

Веб-сервер (любой из следующих)

  • WAMP (Windows)
  • Microsoft IIS (Windows)
  • ЛАМПА (Linux)
  • MAMP (Macintosh)
  • XAMP (мультиплатформенный)
  • Nginx (мультиплатформенный)
  • PHP встроенный веб-сервер разработки (мультиплатформенный)

Поддержка браузера (любое из следующего)

  • IE (Internet Explorer 8+)
  • Fire Fox
  • Гугл Хром
  • Сафари

Совместимость с PHP — PHP 5.3 или новее. Чтобы получить максимальную выгоду, используйте последнюю версию.

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

Установка из командной строки

Установка FuelPHP из командной строки очень проста и занимает максимум пять минут.

Установить пакет масла

Oil — это специальный пакет / команда, предоставляемая платформой FuelPHP для выполнения множества задач, необходимых при разработке приложения FuelPHP, включая установку, разработку и тестирование приложения.

Чтобы установить пакет Oil , откройте оболочку и выполните следующую команду —

sudo curl https://get.fuelphp.com/oil | sh

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

 % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current 
                                 Dload  Upload   Total   Spent    Left  Speed 
100   479  100   479    0     0    353      0  0:00:01  0:00:01 --:--:--   353

Создать новый проект

Чтобы создать новый проект с использованием Oil, используйте следующую команду —

oil create <project_name>

Давайте создадим новый проект с именем «HelloWorld», используя следующую команду.

oil create HelloWorld

Теперь вы можете увидеть ответ, подобный следующему, и, наконец, создать простое каркасное приложение FuelPHP.

composer create-project fuel/fuel HelloWorld 
Installing fuel/fuel (1.8.0.1) 
   - Installing fuel/fuel (1.8.0.1) 
      Loading from cache  

Created project in HelloWorld  

Loading composer repositories with package information 
Updating dependencies (including require-dev) 
   - Installing composer/installers (v1.3.0) 
      Loading from cache
   - Installing fuelphp/upload (2.0.6) 
      Loading from cache  
   - Installing michelf/php-markdown (1.4.0) 
      Loading from cache  
   - Installing psr/log (1.0.2) 
      Loading from cache  
   - Installing monolog/monolog (1.18.2) 
      Loading from cache  
   - Installing phpseclib/phpseclib (2.0.0) 
      Loading from cache  
   - Installing fuel/core (1.8.0.4) 
      Loading from cache  
   - Installing fuel/auth (1.8.0.4) 
      Loading from cache  
   - Installing fuel/email (1.8.0.4) 
      Loading from cache  
   - Installing fuel/oil (1.8.0.4) 
      Loading from cache  
   - Installing fuel/orm (1.8.0.1) 
      Loading from cache  
   - Installing fuel/parser (1.8.0.4) 
      Loading from cache  
   - Installing fuel/docs (1.8.0.4) 
      Loading from cache
   ……………. 
   …………….  
   Writing lock file
   Generating autoload files 

Нефтяная версия

Чтобы проверить, доступно ли масло и проверить версию, используйте следующую команду —

$ cd HelloWorld
$ php oil -v

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

Fuel: 1.8 running in "development" mode

Команда нефтяной помощи

Чтобы получить базовую справочную документацию Oil, используйте следующую команду —

$ php oil help

Приведенная выше команда покажет справочную документацию, подобную следующей:

Usage: 
   php oil [cell|console|generate|package|refine|help|server|test]  
Runtime options: 
   -f, [--force]    # Overwrite files that already exist 
   -s, [--skip]     # Skip files that already exist 
   -q, [--quiet]    # Supress status output 
   -t, [--speak]    # Speak errors in a robot voice  
Description:   
   The 'oil' command can be used in several ways to facilitate quick development, help 
   with testing your application and for running Tasks.  
Environment: 
   If you want to specify a specific environment oil has to run in, overload the 
   environment variable on the commandline: FUEL_ENV=staging php oil <commands>
More information: 
   You can pass the parameter "help" to each of the defined command to get 
   information about that specific command: php oil package help  
Documentation:   
   http://docs.fuelphp.com/packages/oil/intro.html    

На данный момент, у вас есть идея, как установить Топливо, используя Масло. Давайте рассмотрим установку на основе композитора в следующем разделе.

Установка на основе Composer

Следующая команда используется для установки FuelPHP с помощью Composer.

$ composer create-project fuel/fuel --prefer-dist.

Git Repository Clones

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

$ composer create-project fuel/fuel:dev-1.9/develop --prefer-source.

Запуск приложения

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

$ cd path/to/HelloWorld/public
$ php -S localhost:8080 index.php

Это дает следующий ответ.

PHP 5.5.31 Development Server started at Sun May 21 12:26:10 2017
Listening on http://localhost:8080
Document root is /Users/workspace/php-fuel/HelloWorld/public
Press Ctrl-C to quit.

Теперь запросите URL http: // localhost: 8080, и он даст следующий результат.

Результат

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

Это самый простой способ запустить приложение FuelPHP в среде разработки. Если вы создадите свое приложение таким образом в производственной среде, вы столкнетесь с проблемами безопасности. Рекомендуемый способ — настройка конфигурации виртуального хоста. Это объясняется для веб-сервера Apache в следующем разделе.

Настройка виртуального хоста

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

Файл виртуального хоста

Откройте виртуальный хост и добавьте следующие изменения.

<VirtualHost *:80> 
   ServerName hello.app 
   DocumentRoot /path/to/public 
   SetEnv FUEL_ENV “development”
   
   <Directory /path/to/public> 
      DirectoryIndex index.php 
      AllowOverride All 
      Order allow,deny 
      Allow from all 
   </Directory> 
</VirtualHost>

Файл хоста системы

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

sudo vi /etc/hosts

Затем добавьте следующую строку в конец файла.

127.0.0.1 hello.app

Чтобы сделать все изменения доступными, перезапустите сервер Apache и запросите URL-адрес http://hello.app . Он создает домашнюю страницу FuelPHP.

FuelPHP — Обзор архитектуры

FuelPHP основан на проверенной в битве архитектуре Model-View-Controller и поддержке HMVC (Hierarchical MVC) . В то время как MVC обеспечивает гибкую и многоуровневую разработку приложений, HMVC делает еще один шаг вперед, чтобы включить виджетизацию веб-приложения.

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

модель

Модель является бизнес-сущностью приложения. Контроллер и View обмениваются данными в виде модели. Модель обеспечивает единообразное представление наших бизнес-данных. Он позволяет уровню базы данных взаимодействовать со слоем веб-приложения стандартным способом и предоставляет возможность выбирать, сохранять, редактировать и удалять объекты нашей базы данных.

контроллер

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

Посмотреть

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

Ведущий

Presenter — это специальная функция, предоставляемая FuelPHP. Это клей между контроллером и представлением. Контроллер может разделить некоторые из своих обязанностей низкого уровня, таких как получение модели из базы данных, генерация данных для представления и т. Д. Контроллер вызывает Presenter вместо View, который, в свою очередь, вызывает View. Presenter обеспечивает чистое разделение бизнес-логики и уровня представления.

Иерархический MVC

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

модуль

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

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

пакет

FuelPHP предоставляет возможность организовать код в единое целое, называемое Package. Пакет может содержать одну или несколько функций, необходимых для веб-приложения. Например, компонент базы данных, такой как ORM, электронная почта и т. Д., Может быть организован в пакет и использоваться при необходимости.

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

Workflow

Рабочий процесс FuelPHP прост и понятен. Это изображено на следующей диаграмме.

Workflow

  • Пользователь отправляет запрос в приложение.

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

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

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

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

Пользователь отправляет запрос в приложение.

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

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

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

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

FuelPHP — простое веб-приложение

В этой главе мы увидим, как создать простое приложение в среде FuelPHP. Как уже говорилось ранее, вы знаете, как создать новый проект в Fuel. Мы можем взять пример данных сотрудника.

Давайте начнем с создания проекта с именем Employee с помощью следующей команды.

oil create employee

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

employee 
├── CHANGELOG.md 
├── composer.json 
├── composer.lock 
├── composer.phar 
├── CONTRIBUTING.md 
├── fuel 
│   ├── app 
│   │   ├── bootstrap.php 
│   │   ├── cache 
│   │   ├── classes 
│   │   ├── config 
│   │   ├── lang 
│   │   ├── logs 
│   │   ├── migrations 
│   │   ├── modules 
│   │   ├── tasks 
│   │   ├── tests 
│   │   ├── themes 
│   │   ├── tmp 
│   │   ├── vendor 
│   │   └── views 
│   ├── core 
│   │   ├── base56.php 
│   │   ├── base.php 
│   │   ├── bootstrap.php
│   │   ├── bootstrap_phpunit.php 
│   │   ├── classes 
│   │   ├── composer.json 
│   │   ├── config 
│   │   ├── CONTRIBUTING.md 
│   │   ├── lang 
│   │   ├── phpunit.xml 
│   │   ├── tasks 
│   │   ├── tests 
│   │   ├── vendor 
│   │   └── views 
│   ├── packages 
│   │   ├── auth 
│   │   ├── email 
│   │   ├── oil 
│   │   ├── orm 
│   │   └── parser 
│   └── vendor 
│       ├── autoload.php 
│       ├── composer 
│       ├── fuelphp 
│       ├── michelf 
│       ├── monolog 
│       ├── phpseclib 
│       └── psr 
├── LICENSE.md 
├── oil 
├── public 
│   ├── assets 
│   │   ├── css 
│   │   ├── fonts 
│   │   ├── img 
│   │   └── js 
│   ├── favicon.ico 
│   ├── index.php 
│   └── web.config 
├── README.md 
└── TESTING.md  
42 directories, 21 files

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

Структура FuelPHP обеспечивает хорошо организованную структуру приложения. Давайте проверим некоторые важные файлы и папки приложения.

  • fuel — Содержит все файлы PHP.

  • public — содержит все ресурсы, к которым есть прямой доступ через браузер, такие как JavaScript, CSS, изображения и т. д.

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

  • fuel / app / — Содержит все специфичные для приложения файлы PHP. Он содержит модели, представления и контроллеры.

  • топливо / ядро ​​/ — это то место, где живет сама структура топлива.

  • топливо / пакеты / — Содержит все топливные пакеты. По умолчанию топливо будет содержать три пакета: oil, auth и orm. Эти пакеты не будут загружены, если они вам не нужны.

  • fuel / app / config / — содержит все связанные с приложением файлы конфигурации. Основной файл конфигурации приложения, файл config.php находится здесь.

  • fuel / app / classes / — Содержит все специфичные для приложения файлы на основе MVC PHP. Содержит контроллеры, модели, вспомогательные классы, библиотеки и т. Д.

  • топливо / приложение / классы / контроллер / — Контроллеры размещены здесь.

  • топливо / приложение / классы / модель / — модели размещены здесь.

  • fuel / app / views / — Содержит файлы просмотра. Для представлений нет особых соглашений об именах.

fuel — Содержит все файлы PHP.

public — содержит все ресурсы, к которым есть прямой доступ через браузер, такие как JavaScript, CSS, изображения и т. д.

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

fuel / app / — Содержит все специфичные для приложения файлы PHP. Он содержит модели, представления и контроллеры.

топливо / ядро ​​/ — это то место, где живет сама структура топлива.

топливо / пакеты / — Содержит все топливные пакеты. По умолчанию топливо будет содержать три пакета: oil, auth и orm. Эти пакеты не будут загружены, если они вам не нужны.

fuel / app / config / — содержит все связанные с приложением файлы конфигурации. Основной файл конфигурации приложения, файл config.php находится здесь.

fuel / app / classes / — Содержит все специфичные для приложения файлы на основе MVC PHP. Содержит контроллеры, модели, вспомогательные классы, библиотеки и т. Д.

топливо / приложение / классы / контроллер / — Контроллеры размещены здесь.

топливо / приложение / классы / модель / — модели размещены здесь.

fuel / app / views / — Содержит файлы просмотра. Для представлений нет особых соглашений об именах.

Добавить контроллер

Как обсуждалось ранее, FuelPHP основан на паттерне разработки Model-View-Controller (MVC). MVC — это программный подход, который отделяет логику приложения от представления. В шаблоне MVC контроллер играет важную роль, и каждая веб-страница в приложении должна обрабатываться контроллером. По умолчанию контроллеры находятся в папке fuel / app / classes / controller / . Вы можете создать свой собственный класс контроллера здесь.

Переместитесь в папку fuel / app / classes / controller / и создайте файл employee.php. Чтобы создать новый контроллер, просто расширьте класс Controller, предоставляемый FuelPHP, определенный следующим образом.

employee.php

<?php 
   class Controller_Employee extends Controller { 
      public function action_home() { 
         
         // functionality of the home page  
         echo "FuelPHP-Employee application!"; 
      } 
   }

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

маршрутизация

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

<controller>/<action>

Куда,

  • контроллер имя контроллера минус пространство имен, сотрудник

  • action — это имя метода минус ключевое слово action_, home

контроллер имя контроллера минус пространство имен, сотрудник

action — это имя метода минус ключевое слово action_, home

Доступ к вновь созданному контроллеру можно получить по адресу http: // localhost: 8080 / employee / home, и он даст следующий результат.

Результат

Заявка сотрудника

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

В этой главе мы поймем, как настроить приложение FuelPHP. По умолчанию файлы конфигурации хранятся в папке fuel / app / config . Основная конфигурация приложенияfuel / app / config / config.php . Конфигурация указывается с использованием связанного массива PHP.

обзор

По умолчанию все файлы конфигурации по умолчанию определены в папке fuel / core / config . Чтобы переопределить конфигурацию по умолчанию, добавьте соответствующий ключ в файл /fuel/app/config/config.php и измените значение. Мы можем использовать «точечную нотацию» для упрощения многомерного массива. Например, следующие конфигурации служат одной и той же цели (загрузка указанных пакетов).

array("always_load" => array("packages" => array( ... ) ) ); 
always_load.packages = array( ... );

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

Тип формата конфигурации

FuelPHP довольно гибок и предоставляет другой формат для указания конфигурации. Формат конфигурации по умолчанию — PHP с использованием массива php. Другие варианты —

INI — простая текстовая конфигурация, поддерживаемая многими программами, включая сам язык PHP.

[group]
key = value

YAML — Легкое для понимания, основанное на отступах и удобочитаемое управление конфигурацией.

group:
   key: value

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

{ 
   "group" : 
   { 
      "key": "value" 
   } 
} 

Memcached — сохраняет конфигурацию на сервере memcached. Подробности сервера memcached можно указать в главном файле конфигурации fuel / app / config / config.php, используя запись config.memcached .

DB — Сохраняет конфигурацию в системе RDBMS. Структура таблицы таблицы конфигурации выглядит следующим образом.

CREATE TABLE IF NOT EXISTS `config` ( 
   `identifier` char(100) NOT NULL, 
   `config` longtext NOT NULL, 
   `hash` char(13) NOT NULL, 
   PRIMARY KEY (`identifier`) 
)

Детали базы данных и таблицы могут быть указаны в файле конфигурации с помощью записей config.database и config.table_name .

Среда

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

  • Разработка — \ Топливо :: РАЗВИТИЕ устанавливает режим разработки

  • Производство — \ Топливо :: ПРОИЗВОДСТВО устанавливает режим производства

  • Test — \ Fuel :: TEST устанавливает режим тестирования

  • Staging — \ Fuel :: STAGING устанавливает режим постановки

Разработка — \ Топливо :: РАЗВИТИЕ устанавливает режим разработки

Производство — \ Топливо :: ПРОИЗВОДСТВО устанавливает режим производства

Test — \ Fuel :: TEST устанавливает режим тестирования

Staging — \ Fuel :: STAGING устанавливает режим постановки

FuelPHP также поддерживает создание новой среды. Это позволит каждому разработчику иметь свои собственные настройки конфигурации, и они могут включить его во время кодирования и тестирования приложения. Конфигурацию определенной среды можно добавить, просто создав папку с именем среды (пример: test) и поместив файл конфигурации в только что созданную папку, как показано ниже.

. ├── config.php 
├── db.php 
├── development 
│   └── db.php 
├── production 
│   └── db.php 
├── routes.php 
├── staging 
│   └── db.php
└── test 
    └── db.php  
4 directories, 7 files

Установите вашу среду

Существует три способа настройки вашей среды.

Вариант 1. Установить среду с переменными среды веб-сервера. Добавьте следующий код в раздел виртуального хоста в файле httpd.conf веб-сервера Apache. Его также можно добавить в файл .htaccess .

SetEnv FUEL_ENV production

Вариант 2. Установить среду с помощью файла начальной загрузки FuelPHP , /fuel/app/bootstrap.php

Fuel::$env = (isset($_SERVER['FUEL_ENV']

Вариант 3 — Настройка среды с использованием масла

$ env FUEL_ENV = production php oil -v

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

Fuel: 1.8 running in "production" mode

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

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

employee.php

<?php  
   class Controller_Employee extends Controller { 
      public function action_home() { 
         echo "FuelPHP-Employee application!"; 
      }  
      
      public function action_index() { 
         echo "This is the index method of employee controller"; 
      } 
   } 

Методы контроллера

Контроллеры обрабатывают веб-запрос, используя один из его методов действия _. Мы можем создать как можно больше методов action_ в зависимости от требований приложения. Метод action_ по умолчанию — action_index . Метод action_index может быть вызван любым из следующих URL.

http://localhost:8080/employee/index
http://localhost:8080/employee/

Результат

Контролер сотрудников

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

<?php  
   class Controller_Employee extends Controller { 
      public function action_home() { 
         echo "FuelPHP-Employee application!"; 
      }  
      public function action_index() { 
         echo "This is the index method of employee controller"; 
      }  
      public function action_show() { 
         echo "This is the show method of employee controller"; 
      } 
   } 

Метод action_show может быть вызван с использованием следующего URL.

http://localhost:8080/home/show

Результат

Показать метод

before () Метод

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

Давайте создадим метод before и напечатаем простое текстовое сообщение.

public function before() { 
   echo "This message comes from <em>before()</em> method</br>"; 
} 

Индексная страница с до действия

Индекс перед действием

Показать страницу с перед действием

Показать перед действием

метод after ()

Метод after () аналогичен методу before (), но выполняется после вызова метода action_ . Метод after () принимает ответ в качестве входных данных и возвращает объект ответа .

public function after($response) { 
   if ( ! $response instanceof Response) { 
      $response = \Response::forge($response, $this->response_status); 
   } 
   return $response; 
} 

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

Удлиняющие контроллеры

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

class Controller_Employee extends Controller_Welcome { 
   // controller methods 
} 

Это поможет в обмене методами.

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

Топливо может генерировать контроллер с помощью команды «Масло». Ниже приводится синтаксис.

Синтаксис

oil g controller <controller-name> 

пример

oil g controller sample

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

Результат

Creating view: /path/to/project/fuel/app/views/template.php 
Creating view: /path/to/project/fuel/app/views/sample/index.php 
Creating controller: /path/to/project/fuel/app/classes/controller/sample.php 

Тип контроллеров

FuelPHP предоставляет различные типы контроллеров для различных целей. Они заключаются в следующем —

  • Базовый контроллер
  • Контроллер шаблонов
  • Контроллер отдыха
  • Гибридный контроллер

Базовый контроллер

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

Контроллер шаблонов

Template Controller является расширением базового контроллера. Имеется поддержка шаблонов, предопределенная до () и после (). По сути, его можно использовать для обертывания вашего представления в макете с верхним, нижним колонтитулом, боковой панелью и т. Д. Чтобы создать контроллер шаблона, нам нужно расширить класс Controller_Template . По умолчанию все методы класса, который расширяет Controller_Template, должны использовать шаблон.

Это определяется следующим образом.

class Controller_Employee extends Controller_Template { 
   public function action_index() { 
      // add methods 
   } 
}

Мы обсудим больше о контроллере шаблона в главе Views.

Контроллер Отдыха

Контроллер отдыха является расширением базового контроллера. Он имеет предопределенную поддержку программирования REST API. Это позволит вам с легкостью создавать API.

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

class Controller_Employee extends Controller_Rest { 
   public function action_index() { 
      // add methods 
   } 
}

Мы обсудим больше о контроллере отдыха в главе Ajax.

Гибридный контроллер

Гибридный контроллер выполняет функции контроллера REST и контроллера шаблона в одном базовом контроллере.

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

Карты маршрутизации запрашивают URI для метода конкретного контроллера. В этой главе мы подробно обсудим концепцию маршрутизации в FuelPHP.

конфигурация

Файл конфигурации маршрутов находится по адресу fuel / app / config / rout.php . Файл routs.php по умолчанию определяется следующим образом:

<?php 
   return array ( 
      '_root_'  => 'welcome/index',   // The default route 
      '_404_'   => 'welcome/404',     // The main 404 route 
      'hello(/:name)?' => array('welcome/hello', 'name' => 'hello'), 
   );

Здесь _root_ — это предопределенный маршрут по умолчанию, который будет сопоставляться при запросе приложения с корневым путем, например, http: // localhost: 8080 / . Значением _root_ является контроллер и действие, которое должно быть разрешено при его сопоставлении. welcome / index преобразуется в контроллер Controller_Welcome и метод действия action_index . Точно так же у нас есть следующие зарезервированные маршруты.

  • root — маршрут по умолчанию, когда не указан URI.

  • 403 — Выдает, когда HttpNoAccessException найден.

  • 404 — Возвращается, когда страница не найдена.

  • 500 — Выдает, когда HttpServerErrorException найден.

root — маршрут по умолчанию, когда не указан URI.

403 — Выдает, когда HttpNoAccessException найден.

404 — Возвращается, когда страница не найдена.

500 — Выдает, когда HttpServerErrorException найден.

Простая маршрутизация

Маршрут сравнивается с URI запроса. Если совпадение найдено, запрос направляется на URI. Простая маршрутизация описывается следующим образом:

return array ( 
   'about'  => 'site/about', 
   'login' => 'employee/login', 
);

Здесь, о совпадениях http: // localhost: 8080 / about и разрешает контроллер, Controller_Site и метод действия action_about

вход в систему соответствует http: // localhost: 8080 / login и разрешает контроллер, Controller_Login и метод действия action_login

Продвинутая маршрутизация

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

  • : any — соответствует любому значению с этого момента в URI, не соответствует «ничему»

  • : все — как: любое, но также соответствует «ничто»

  • : сегмент — соответствует только одному сегменту в URI, но этот сегмент может быть любым

  • : num — соответствует любому числу

  • : alpha — соответствует любым буквенным символам, включая UTF-8.

  • : alnum — соответствует любым буквенно-цифровым символам, включая UTF-8.

: any — соответствует любому значению с этого момента в URI, не соответствует «ничему»

: все — как: любое, но также соответствует «ничто»

: сегмент — соответствует только одному сегменту в URI, но этот сегмент может быть любым

: num — соответствует любому числу

: alpha — соответствует любым буквенным символам, включая UTF-8.

: alnum — соответствует любым буквенно-цифровым символам, включая UTF-8.

Например, следующий маршрут соответствует URI http: // localhost: 8080 / hello / FuelPHP и разрешает контроллер, Controller_Welcome и действие action_hello

'hello(/:name)?' => array('welcome/hello', 'name' => 'hello'),

Соответствующий метод действия в Controller_Welcome выглядит следующим образом:

public function action_hello() { 
   $this->name = Request::active()->param('name', 'World'); 
   $message = "Hello, " . $this->name;  
   echo $message; 
}

Здесь мы использовали класс Request, чтобы получить параметр name из URL. Если имя не найдено, тогда мы используем World в качестве значения по умолчанию. Мы изучим класс Request в главе « Запрос и ответ» .

Результат

Контроллер Добро пожаловать

HTTP Метод Действие

FuelPHP поддерживает маршруты, соответствующие действиям с префиксом HTTP. Ниже приведен основной синтаксис.

class Controller_Employee extends Controller { 
   public function get_index() { 
      // called when the HTTP method is GET. 
   }  
   public function post_index(){ 
      // called when the HTTP method is POST. 
   } 
}

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

return array ( 
   // Routes GET /employee to /employee/all and POST /employee to /employee/create 
   ‘employee’ => array(array('GET', new Route(‘employee/all')), array('POST', 
      new Route(‘employee/create'))), 
);

FuelPHP — Запросы и ответы

HTTP-запрос и HTTP-ответ играют важную роль в любом веб-приложении. Нам нужно получить полную информацию о запросе http, чтобы правильно его обработать. После обработки нам нужно отправить обработанные данные клиенту через HTTP-ответ.

FuelPHP предоставляет превосходный класс Request и Response для чтения и записи HTTP-запроса и HTTP-ответа соответственно. Давайте узнаем о классах Request и Response в этой главе.

Запрос

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

Создание нового запроса позволяет приложению запрашивать другую часть приложения или совсем другое приложение и отображать результат. Давайте узнаем, как разобрать входящий запрос в этой главе, и научимся создавать новый запрос в главе «Запрос HMVC».

Разбор запроса

Класс запроса предоставляет три метода для получения подробностей http-запроса. Они заключаются в следующем,

active — это статический метод, который возвращает текущий активный http-запрос.

$currentRequest = Request::active();

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

$param = Request::active()->param('employee_name', 'none');

params — Это то же самое, что и param, за исключением того, что он возвращает все параметры в виде массива.

$params = Request::active()->params();

пример

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

Шаг 1 — Создайте новое действие action_request в контроллере сотрудника.

public function action_request() { 
}

Шаг 2 — Вызовите методы запроса, чтобы получить все параметры текущего запроса.

public function action_request() { 
   $params = Request::active()->params(); 
}

Шаг 3 — Дамп извлеченный массив параметров.

public function action_request() { 
   $params = Request::active()->params();  
   echo dump($params); 
}

Шаг 4 — Измените маршрут, включив параметры в файл конфигурации маршрута, fuel / app / config / rout.php.

'employee/request(/:name)?' => array('employee/request', 'name' => 'name'),

Теперь, запрашивая новое действие, http: // localhost: 8080 / employee / request / Jon, он покажет следующий ответ.

Запрос на разбор

отклик

Класс ответа предоставляет опции для создания ответа http. По умолчанию нам не нужно использовать класс ответа напрямую в большинстве ситуаций. Вместо этого мы используем View (который мы изучим в следующей главе), чтобы создать http-ответ. View скрывает ответ http от разработчика и отправляет ответ клиенту, используя базовый класс Response . В сложной ситуации мы напрямую используем класс Response и создаем полный http-ответ.

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

Ответ состоит из заголовков и тела. Основной заголовок — код статуса http. Http-код состояния — это стандартные коды, определенные в протоколе HTTP для описания ответа. Например, код состояния 200 означает, что запрос выполнен успешно.

Класс Response предоставляет три аргумента для создания ответа http,

  • $ body — тело ответа http

  • $ status_code — код статуса ответа http

  • $ headers — необязательные заголовки в виде массива

$ body — тело ответа http

$ status_code — код статуса ответа http

$ headers — необязательные заголовки в виде массива

$body = "Hi, FuelPHP"; 
$headers = array ( 
   'Content-Type' => 'text/html', 
); 
$response = new Response($body, 200, $headers);

Давайте создадим новое действие action_response в контроллере сотрудников следующим образом.

public function action_response() { 
   $body = "Hi, FuelPHP"; 
   $headers = array ('Content-Type' => 'text/html',); 
   $response = new Response($body, 200, $headers); 
   
   return $response; 
}

Результат

Действие Ответ

методы

Класс Response предоставляет множество методов для манипулирования HTTP-ответами. Они заключаются в следующем,

forge — это то же самое, что конструктор класса ответа, как показано выше.

return Response::forge("Hi, FuelPHP", 404);

redirect — предоставляет возможность перенаправления на URL вместо отправки ответа. Он содержит следующие аргументы,

a.url — целевой URL b. Метод — методы перенаправления. местоположение (по умолчанию) и обновление c . redirect_code — код статуса http. Значение по умолчанию 302.

// use a URL 
Response::redirect('http://some-domain/index', 'refresh');  

// or use a relative URI 
Response::redirect('employee/list'); 

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

// If there is no back page, go to the employee list page 
Response::redirect_back('/employee/list', 'refresh');

set_status — предоставляет возможность установить код статуса http.

$response = new Response(); 
$response->set_status(404); 

set_header — предоставляет возможность установить заголовки http.

$response = new Response(); 
$response->set_header('Content-Type', 'application/pdf');  

// replace previous value using third arguments 
$response->set_header('Content-Type', 'application/pdf', 'text/plain'); 

set_headers — это то же самое, что и set_header, за исключением того, что он предоставляет возможность установить несколько заголовков, используя массив.

$response = new Response(); 
$response->set_headers (array 
   'Content-Type' => 'application/pdf', 
   'Pragma' => 'no-cache', 
)); 

get_header — позволяет получить предыдущие данные заголовка набора.

$response = new Response(); 
$response->set_header('Pragma', 'no-cache');  

// returns 'no-cache' 
$header = $response->get_header('Pragma');  

// returns array('Pragma' => 'no-cache') 
$header = $response->get_header();

body — предоставляет возможность установить тело ответа http.

$response = new Response(); 
$response->body('Hi, FuelPHP');  

// returns 'Hi, FuelPHP' 
$body = $response->body();

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

$response->send_headers();

send — То же, что send_headers, за исключением того, что заголовки могут быть ограничены в ответе http.

// send the headers as well 
$response->send(true);  

// only send the body 
$response->send(false); 
$response->send(); 

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

Вид — это уровень представления приложения MVC. Он отделяет логику приложения от логики представления. Когда контроллеру необходимо сгенерировать HTML, CSS или любой другой контент, он направляет задачу в механизм представления.

FuelPHP обеспечивает простой и гибкий класс View со всеми необходимыми функциями движка View. Класс представления поддерживает рендеринг файла представления. Просмотр файла представляет собой HTML-страницу со встроенными инструкциями PHP. Переменные файла представления могут быть установлены с использованием класса View в виде PHP-массива и ссылки в файле представления с помощью ключа массива. Давайте проверим некоторые важные методы класса View.

ковать

  • Цель — Создает новый объект View

  • Параметр — следующие параметры

    • $ file — путь к файлу представления относительно папки представлений, fuel / app / views

    • $ data — массив значений

    • $ filter — устанавливает автоматическое кодирование, по умолчанию это настройки в основном файле конфигурации

  • Возвращает — Экземпляр представления

Цель — Создает новый объект View

Параметр — следующие параметры

$ file — путь к файлу представления относительно папки представлений, fuel / app / views

$ data — массив значений

$ filter — устанавливает автоматическое кодирование, по умолчанию это настройки в основном файле конфигурации

Возвращает — Экземпляр представления

Например,

$view = View::forge ('path/to/view', array( 
   'title' => "Show employee, 
   'employees' => $employees, 
));

auto_filter

  • Цель — Установить, следует ли кодировать данные или нет

  • Параметр — следующий параметр

    • $ filter — true / false

  • Возвращает — текущий объект просмотра

Цель — Установить, следует ли кодировать данные или нет

Параметр — следующий параметр

$ filter — true / false

Возвращает — текущий объект просмотра

Например,

$view->auto_filter(); 
$view = $view->auto_filter(false);

set_filename

  • Цель — Позволяет установить или изменить вид файла.

  • Параметр — Следующий параметр —

    • $ file — путь к файлу для просмотра относительно папки views, fuel / app / views

  • Возвращает — текущий объект просмотра

Цель — Позволяет установить или изменить вид файла.

Параметр — Следующий параметр —

$ file — путь к файлу для просмотра относительно папки views, fuel / app / views

Возвращает — текущий объект просмотра

Например,

$view = new View();
$view>set_filename('path/to/view');

задавать

  • Цель — установить значение одной или нескольких переменных

  • Параметр — следующие параметры

    • $ key — имя переменной или массив значений

    • $ value — значение / ноль

    • $ filter — настройка кодировки, true / false

  • Возвращает — текущий объект просмотра

Цель — установить значение одной или нескольких переменных

Параметр — следующие параметры

$ key — имя переменной или массив значений

$ value — значение / ноль

$ filter — настройка кодировки, true / false

Возвращает — текущий объект просмотра

Например,

$view = new View(); 
$view->set(array('name' => 'Jon'));

set_global

set_global похож на set , за исключением того, что он применяется ко всем представлениям, а переменные доступны для всех представлений. Это статический метод.

View::set_global('name', 'Jon', false);

set_safe

  • Цель — установить значение одной или нескольких переменных с включенным безопасным кодированием.

  • Параметр — следующие параметры —

    • $ key — имя переменной или массив значений

    • $ value — значение / ноль

  • Возвращает — текущий объект просмотра

Цель — установить значение одной или нескольких переменных с включенным безопасным кодированием.

Параметр — следующие параметры —

$ key — имя переменной или массив значений

$ value — значение / ноль

Возвращает — текущий объект просмотра

Например,

$view = new View(); 
$view->set_safe(array('name' => 'Jon'), null); 

получить

  • Цель — Получить значение одной или нескольких переменных.

  • Параметр — следующие параметры

    • $ key — имя переменной

    • $ default — значение по умолчанию, которое будет возвращено, если ключ не найден

  • Returns — значение клавиши ввода

Цель — Получить значение одной или нескольких переменных.

Параметр — следующие параметры

$ key — имя переменной

$ default — значение по умолчанию, которое будет возвращено, если ключ не найден

Returns — значение клавиши ввода

Например,

$view = new View(); 
$name = $view>get('name');  // name = 'Jon'

оказывать

  • Цель — преобразовать файлы представления в строку, объединив ее с локальными и глобальными переменными

  • Параметр — следующие параметры —

    • $ file — имя файла представления

  • Возвращает — представленный файл представления как строка

Цель — преобразовать файлы представления в строку, объединив ее с локальными и глобальными переменными

Параметр — следующие параметры —

$ file — имя файла представления

Возвращает — представленный файл представления как строка

Например,

$html = View::forge()->render('/path/to/view');

Создать представление

Чтобы понять представления, давайте изменим метод действия action_show контроллера Controller_Employee .

employee.php

<?php  
   class Controller_Employee extends Controller { 
      public function action_show() {
         return View::forge('employee/show'); 
      } 
   }

Теперь создайте папку сотрудника в каталоге views, расположенном по адресу fuel / app / views . Затем создайте файл show.php внутри папки сотрудников и добавьте следующий код.

show.php

<h3> My first view </h3>

Теперь запросите URL http: // localhost: 8080 / employee / show, и он даст следующий результат.

Показать представление

Передача данных для просмотра

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

employee.php

class Controller_Employee extends Controller { 
   public function action_show() { 
      $data = array(); //stores variables going to views 
      $data['name'] = ‘Jon’; 
      $data[‘job’] = ‘Designer’;  
      
      //assign the view to browser output 
      return View::forge('employee/show', $data); 
   } 
}

Теперь добавьте изменения в файл представления.

show.php

<html> 
   <body> 
      Hello, <?php echo $name; ?>. 
      Your job is, <?php echo $job; ?>. 
   </body> 
</html>

После запроса URL-адреса он отобразит имя и задание следующим образом:

Проходящий запрос на просмотр

Просмотр фильтра

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

employee.php

class Controller_Employee extends Controller { 
   public function action_show() { 
      $view = \View::forge('employee/show'); 
      $view->set('name', 'Jon', true); 
      $view->set('job', '<em>Designer</em>', false); 
      return $view; 
   } 
}   

После запроса URL-адреса он отобразит детали задания в стиле выделения следующим образом.

Просмотр фильтра

Вложенные представления

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

employee.php

class Controller_Employee extends Controller { 
   public function action_nestedview() { 
      
      //assign variables 
      $data = array(); 
      $data['title'] = 'Home';  
      $data['name'] = 'Jon'; 
      $data['job'] = 'Designer';  
      $views = array(); 
      $views['head'] = View::forge('head', $data)->render(); 
      $views['content'] = View::forge('employee/show', $data)->render();  
      return View::forge('layout', $views, false)->render(); 
   } 
}

топливо / приложение / просмотров / layout.php

<html> 
   <head> 
      <?php echo $head; ?> 
   </head> 
   
   <body> 
      <?php echo $content; ?> 
   </body> 
</html> 

топливо / приложение / просмотров / head.php

<title>
   <?php echo $title; ?>
</title> 

топливо / приложение / просмотров / сотрудник / show.php

Hello, <?php echo $name; ?>. 
Your job is, <?php echo $job; ?>.

После запроса URL, http: // localhost: 8080 / employee / nestedview и проверки исходного кода, он дает следующий код.

<html> 
   <head> 
      <title>Home</title> 
   </head> 
   
   <body> 
      Hello, Jon. 
      Your job is, Designer. 
   </body> 
</html>

Контроллер шаблонов

FuelPHP предоставляет контроллер Controller_Template со встроенной концепцией компоновки. Концепция макета выполняется с использованием метода Controller before () и after () . Чтобы использовать контроллер шаблона, нам нужно расширить контроллер, используя Controller_Template вместо Controller. При использовании метода after () / before () нам нужно вызывать parent :: before и parent :: after, в противном случае шаблон обрывается.

<?php 
   class Controller_Test extends Controller_Template { 
      public function before() { 
         parent::before(); 
         // do stuff 
      } 
        
      public function after($response) { 
         $response = parent::after($response); 
         
         // do stuff 
         return $response; 
      } 
   }

template.php

Это файл шаблона по умолчанию в Fuel. Файл шаблона используется для вызова JS, CSS, HTML и частичных представлений вызова. Он расположен на топливо / приложение / просмотров / . Шаблоны используются, чтобы обернуть ваш вид в макет с верхним, нижним колонтитулом, боковой панелью и т. Д. Мы можем изменить шаблон по умолчанию, используя переменную $ template в методе действия следующим образом.

топливо / приложение / классы / контроллер / test.php

<?php  
   class Controller_Test extends Controller_Template { 
      public $template = 'template_test'; 
      public function action_index() { 
         $this->template->title = 'Example Page'; 
         $this->template->content = View::forge('test/index'); 
      } 
   } 

топливо / приложение / просмотров / template_test.php

<!DOCTYPE html> 
<html> 
   <head> 
      <meta charset = "utf-8"> 
      <title><?php echo $title; ?></title> 
      <?php echo Asset::css('bootstrap.css'); ?> 
   </head> 

   <body> 
      <div> 
         <?php echo $content; ?>
      </div> 
   </body> 
</html> 

топливо / приложение / просмотров / тест / index.php

<h3>My Test page</h3>

Теперь запросите URL http: // localhost: 8080 / test, и он даст следующий результат.

Результат

<!DOCTYPE html> 
<html> 
   <head> 
      <meta charset = "utf-8"> 
      <title>Example Page</title> 
      <link type = "text/css" rel = "stylesheet" 
         href = "http://localhost:8080/assets/css/bootstrap.css?1464964766" />
   </head> 
   
   <body> 
      <div> 
         <h3>My Test page</h3> 
      </div> 
   </body> 
</html>

Создать страницу просмотра

Вы можете создать страницу просмотра, используя консоль Fuel’s Oil. Ниже приведен основной синтаксис.

oil g controller <controller-name> <page1> <page2> ..

Чтобы создать контроллер администратора с домашней страницей и страницами входа в систему, используйте следующую команду.

oil g controller admin home login

Результат

Creating view: /path/to/app/fuel/app/views/admin/home.php 
Creating view: /path/to/app/fuel/app/views/admin/login.php 
Creating controller: /path/to/app/fuel/app/classes/controller/admin.php

FuelPHP — Ведущие

FuelPHP предоставляет дополнительный слой после контроллера для генерации представлений. Когда контроллер обрабатывает ввод и выполняет бизнес-логику, он отправляет элемент управления Presenter , который заботится о дополнительной логике, такой как выборка данных из базы данных, настройка данных представления и т. Д., А затем вызывает представление объект.

Мы можем визуализировать представления с помощью класса Presenter следующим образом:

топливо / приложение / классы / контроллер / employee.php

public Controller_Employee extends Controller { 
   public function action_welcome() { 
      return Presenter::forge('employee/hello'); 
   } 
}

Стандартное расположение класса презентатора — fuel / app / classes / Presenter / . Ниже приведен простой пример.

топливо / приложение / классы / ведущий / сотрудник / hello.php

<?php  
   class Presenter_Employee_Hello extends Presenter { 
      public function view() { 
         $this->name = Request::active()->param('name', 'World'); 
      } 
   } 

Файл представления указанного выше класса презентатора преобразуется в employee / hello.php относительно папки views , как указано.

топливо / приложение / просмотров / сотрудник / hello.php

<h3>Hi, <?php echo $name; ?></h3> 

Наконец, измените маршрут в соответствии с приветствием сотрудника, как показано ниже:

топливо / приложение / Config / routes.php

'employee/hello(/:name)?' => array('employee/welcome', 'name' => 'hello'), 

Теперь, запрашивая URL, http: // localhost: 8080 / employee / hello / Jon выдает следующий результат.

Результат

Представление докладчика

FuelPHP — модели и база данных

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

Создание модели

В FuelPHP модель — это просто простой класс PHP, расширяющий встроенный класс Model. По умолчанию к моделям может быть добавлен префикс Model_, аналогичный контроллерам, и их следует поместить в папку fuel / app / classes / model / . Давайте создадим базовую модель сотрудника и расширим ее по мере продвижения.

топливо / приложение / классы / модель / employee.php

<?php 
   namespace Model; 

   class Model_Employee extends \Model { 
      public static function fetchAll() { 
         // Code to fetch employee from database 
      } 
   }

Доступ к модели

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

use \Model\Employee; 

class Controller_Employee extends Controller { 
   public function action_index() { 
      $employees = Employee::fetchAll(); 
   } 
}

Обзор базы данных

FuelPHP предоставляет собственный уровень абстракции базы данных для извлечения данных из базы данных. Он предоставляет как базовый, так и расширенный инструмент на основе ORM. Базовый набор инструментов состоит из классов, основанных на DB, DBUtil и Query_Builer. Расширенный инструментарий Orm. Набор инструментов Orm является производным от базового набора инструментов и упакован в отдельный пакет.

Конфигурация базы данных

FuelPHP отделяет настройки базы данных от основного файла конфигурации, и это файл fuel / app / config / db.php . Он поддерживает отдельные настройки для каждой среды. В настоящее время FuelPHP поддерживает драйверы MySQL, MySQLi и PDO. Пример настройки следующий:

<?php  
   return array ( 
      'development' => array ( 
         'type'           => 'mysqli', 
         'connection'     => array ( 
            'hostname'    => 'localhost', 
            'port'        => '3306', 
            'database'    => 'tutorialspoint_fueldb', 
            'username'    => 'root', 
            'password'    => 'password', 
            'persistent'  => false, 
            'compress'    => false, 
         ), 
         
         'identifier'     => '`', 
         'table_prefix'   => '', 
         'charset'        => 'utf8', 
         'enable_cache'   => true, 
         'profiling'      => false, 
         'readonly'       => false, 
      ), 
   )

DB-Toolkit

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

  • Database_Connection — Singleton и основной класс для взаимодействия с базой данных

  • Database_Query — базовый, конкретный класс для выполнения запроса SQL и получения результата

  • Database_Query_Builder — базовый абстрактный класс для построения SQL-запроса

  • Database_Query_Builder_Join — класс для создания объединений SQL

  • Database_Query_Builder_Where — абстрактный класс для построения условий SQL-запроса

  • Database_Query_Builder_Select — Конкретный класс для построения запроса выбора SQL

  • Database_Query_Builder_Insert — Абстрактный класс для построения запроса вставки SQL

  • Database_Query_Builder_Update — Абстрактный класс для построения запроса на обновление SQL

  • Database_Query_Builder_Delete — Абстрактный класс для построения запроса на удаление SQL

Database_Connection — Singleton и основной класс для взаимодействия с базой данных

Database_Query — базовый, конкретный класс для выполнения запроса SQL и получения результата

Database_Query_Builder — базовый абстрактный класс для построения SQL-запроса

Database_Query_Builder_Join — класс для создания объединений SQL

Database_Query_Builder_Where — абстрактный класс для построения условий SQL-запроса

Database_Query_Builder_Select — Конкретный класс для построения запроса выбора SQL

Database_Query_Builder_Insert — Абстрактный класс для построения запроса вставки SQL

Database_Query_Builder_Update — Абстрактный класс для построения запроса на обновление SQL

Database_Query_Builder_Delete — Абстрактный класс для построения запроса на удаление SQL

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

Классы и Методы

БД API

Давайте изучим наиболее важные методы, доступные в классе DB в этом разделе.

пример

  • Цель — Создает и возвращает новый экземпляр Database_Connection .

  • Параметр

    • $ db — Имя подключения к базе данных, определенное в файле конфигурации, необязательно.

  • Returns — возвращает объект Database_Connection

Цель — Создает и возвращает новый экземпляр Database_Connection .

Параметр

$ db — Имя подключения к базе данных, определенное в файле конфигурации, необязательно.

Returns — возвращает объект Database_Connection

Например,

$db = DB::instance(); 
$db = DB::instance('test');

запрос

  • Цель — подготовить предоставленный оператор SQL и вернуть объект Database_Query, который можно использовать для вставки, обновления, удаления или извлечения данных из базы данных.

  • Параметр

    • $ query — оператор SQL, может содержать заполнители;

    • $ typeтип SQL, необязательный (DB :: SELECT, DB :: INSERT, DB :: UPDATE и DB :: DELETE)

  • Returns — возвращает объект Database_Query

Цель — подготовить предоставленный оператор SQL и вернуть объект Database_Query, который можно использовать для вставки, обновления, удаления или извлечения данных из базы данных.

Параметр

$ query — оператор SQL, может содержать заполнители;

$ typeтип SQL, необязательный (DB :: SELECT, DB :: INSERT, DB :: UPDATE и DB :: DELETE)

Returns — возвращает объект Database_Query

Например,

$query = DB::query('SELECT * FROM 'employees'');

last_query

  • Цель — получить последний выполненный запрос

  • Параметр — Нет

  • Returns — возвращает последний выполненный запрос

Цель — получить последний выполненный запрос

Параметр — Нет

Returns — возвращает последний выполненный запрос

Например,

$employees = DB::Select('Select * from 'employee''); 
$sql = DB::last_query();

Выбрать

  • Цель — создать выделенную часть запроса

  • Параметр

    • $ columns — список имен столбцов базы данных

  • Returns — возвращает объект Database_Query_Builder_Select

Цель — создать выделенную часть запроса

Параметр

$ columns — список имен столбцов базы данных

Returns — возвращает объект Database_Query_Builder_Select

Например,

$query = DB::select();              // Select *
$query = DB::select('id', 'name'); // Select id, name 

select_array (DB)

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

$query = DB::select_array(array('id', 'name')); // Select id, name 

вставить

  • Цель — Генерация вставляемой части запроса.

  • Параметр

    • $ table_name — имя таблицы базы данных;

    • $ columns — массив столбцов таблицы

  • Returns — возвращает объект Database_Query_Builder_Insert

Цель — Генерация вставляемой части запроса.

Параметр

$ table_name — имя таблицы базы данных;

$ columns — массив столбцов таблицы

Returns — возвращает объект Database_Query_Builder_Insert

Например,

$query = DB::insert('employee');  // Insert into employee 
$query = DB::insert('employee', array('id', 'name')); // Insert into employee (id, name)

Обновить

  • Цель — создать обновленную часть запроса

  • Параметр

    • $ table_name — имя таблицы базы данных

  • Returns — возвращает объект Database_Query_Builder_Update

Цель — создать обновленную часть запроса

Параметр

$ table_name — имя таблицы базы данных

Returns — возвращает объект Database_Query_Builder_Update

Например,

$query = DB::update('employee'); // update `employee`

удалять

  • Цель — создать часть запроса на удаление

  • Параметр

    • $ table_name — имя таблицы базы данных

  • Returns — возвращает объект Database_Query_Builder_Delete

Цель — создать часть запроса на удаление

Параметр

$ table_name — имя таблицы базы данных

Returns — возвращает объект Database_Query_Builder_Delete

Например

$query = DB::delete('employee');  // delete from 'employee'

API запросов

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

set_connection

  • Цель — установить базу данных (сведения о соединении с базой данных), для которой будет выполняться запрос.

  • Параметр — $ db — имя соединения с базой данных

  • Returns — возвращает объект Database_Query

Цель — установить базу данных (сведения о соединении с базой данных), для которой будет выполняться запрос.

Параметр — $ db — имя соединения с базой данных

Returns — возвращает объект Database_Query

Например,

$query = DB::query('DELETE * FROM employee', DB::DELETE); 
$query->set_connection('2nd-db');

пары

  • Назначение — установить значение параметра, определенного в объекте Query.

  • Параметр

    • $ param — имя параметра;

    • $ value — значение параметра

  • Returns — возвращает объект Database_Query

Назначение — установить значение параметра, определенного в объекте Query.

Параметр

$ param — имя параметра;

$ value — значение параметра

Returns — возвращает объект Database_Query

Например,

// set some variables
$table = 'employee';
$id = 1;
$name = 'Jon';

// don't use
$query = DB::query('SELECT * FROM '.$table.'. WHERE id = '.$id.' AND name = "'.$name.'"');

// but use
$query = DB::query('SELECT * FROM :tablename WHERE id = :id AND name = :name');
$query->param('tablename', 'employee');
$query->param('id', $id);
$query->param('name', $name);

Подобные методы

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

$query->parameters (array( 
   'tablename' => $table, 
   'id' => $id, 
   'name' => $name 
}); 

привязывать

  • Назначение — установить переменную для параметра, определенного в объекте Query

  • Параметр

    • $ param — имя параметра

    • $ var — переменная для привязки параметра

  • Returns — возвращает объект Database_Query

Назначение — установить переменную для параметра, определенного в объекте Query

Параметр

$ param — имя параметра

$ var — переменная для привязки параметра

Returns — возвращает объект Database_Query

Например,

// bind a query parameter 
$table = 'employee'; 
$query = DB::query('DELETE * FROM :tablename', DB::DELETE); 
$query->bind('tablename', $table);  

// update the variable 
$table = 'employee_salary'; 

// DELETE * FROM `employee_salary`; 
$sql = $query->compile();

компилировать

  • Цель — компилировать объект запроса, определенный в запрос SQL

  • Параметр

    • $ db — строка подключения, необязательно

  • Возвращает

Цель — компилировать объект запроса, определенный в запрос SQL

Параметр

$ db — строка подключения, необязательно

Возвращает

Например,

// assign a value to a query parameter 
$table = 'employee'; 
$query = DB::query('DELETE * FROM :tablename', DB::DELETE); 
$query->param('tablename', $table);

// compile the query, returns: DELETE * FROM employee 
$sql = $query->compile(); 

выполнять

  • Цель — выполнить запрос, определенный в объекте Query, и вернуть результат

  • Параметр

    • $ db — имя соединения с базой данных

  • Returns — возвращает результат

Цель — выполнить запрос, определенный в объекте Query, и вернуть результат

Параметр

$ db — имя соединения с базой данных

Returns — возвращает результат

Например,

// assign a value to a query parameter 
$table = 'employee'; 
$query = DB::query('DELETE * FROM :tablename', DB::DELETE); 
$query->param('tablename', $table);  

// execute the query 
$query->execute();

as_assoc

  • Цель — установить тип возвращаемого значения как ассоциативный массив вместо объектов

  • Параметр — Нет

  • Returns — возвращает текущий объект

Цель — установить тип возвращаемого значения как ассоциативный массив вместо объектов

Параметр — Нет

Returns — возвращает текущий объект

Например,

$query = DB::query('SELECT * FROM employee', DB::SELECT); 
$result = $query->as_assoc()->execute(); 
foreach ($result as $row) { 
   echo $row['id']; 
}

as_object

  • Цель — установить тип возвращаемого значения как объект вместо ассоциативного массива.

  • Параметр — Нет

  • Returns — возвращает текущий объект

Цель — установить тип возвращаемого значения как объект вместо ассоциативного массива.

Параметр — Нет

Returns — возвращает текущий объект

Например,

$query = DB::query('SELECT * FROM employee', DB::SELECT); 
$result = $query->as_object()->execute(); 
foreach ($result as $row) { 
   echo $row->id; 
}  

// have ORM model objects return instead 
$result = $query->as_object('Model_Employee')->execute();

API Query Builder

Классы, основанные на построителе запросов (Query_Builder), предоставляют возможности для динамического построения запросов SQL. Он имеет четыре класса, каждый из которых позволяет выбирать (Query_Builder_Select) , вставлять (Query_Builder_Insert) , обновлять (Query_Builder_Update) и удалять (Query_Builder_Delete) запросы. Эти классы являются производными от класса Query_Builder_Where (опция для генерации условий), который сам является производным от Query_Builder , базы всех классов.

Давайте посмотрим на методы, предоставляемые классом Query_Builder.

Выбрать

  • Цель — создать столбцы выбранных запросов.

  • Параметр

    • $ columns — список столбцов, необязательно

  • Returns — возвращает текущий экземпляр

Цель — создать столбцы выбранных запросов.

Параметр

$ columns — список столбцов, необязательно

Returns — возвращает текущий экземпляр

Например,

$query = DB::select('name')  // select `name` 
$query = DB::select(array('first_name', 'name')) // select `first_name` as `name`

от

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

  • Параметр

    • $ tables — список таблиц

  • Returns — возвращает текущий экземпляр

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

Параметр

$ tables — список таблиц

Returns — возвращает текущий экземпляр

Например,

$query = DB::select('name')->from('employee') // select `name` from `employee`

где

  • Цель — Сгенерировать условия запросов на выбор, вставку и обновление.

  • Параметры

    • $ column — имя столбца или массив ($ column, $ alias);

    • $ op — логические операторы, =,! =, IN, BETWEEN и LIKE, необязательно;

    • $ value — значение столбца

  • Returns — возвращает текущий экземпляр

Цель — Сгенерировать условия запросов на выбор, вставку и обновление.

Параметры

$ column — имя столбца или массив ($ column, $ alias);

$ op — логические операторы, =,! =, IN, BETWEEN и LIKE, необязательно;

$ value — значение столбца

Returns — возвращает текущий экземпляр

Например,

$query = DB::select('name')->from('employee')  
$query = $query->where('name', '=', 'Jon'); 
// select `name` from `employee` where `name` = `Jon`;

Подобные методы

Подобные методы: where_open (), and_where_open (), or_where_open (), where_close (), and_where_close () или or_where_close (). Они похожи на методы where () за исключением того, что они добавляют дополнительные ключевые слова и скобки вокруг условий. Ниже приведен пример кода.

$query = DB::select('*')->from('employee');  
$query->where('email', 'like', '%@gmail.com'); 
$query->or_where_open(); 
$query->where('name', 'Jon'); 
$query->and_where('surname', 'Peter');
$query->or_where_close();  
// SELECT * FROM `employee` WHERE `email` LIKE "%gmail.com" OR 
   (`name` = "Jon" AND `surname` = "Peter")

присоединиться

  • Назначение — генерировать таблицы объединений запросов на выборку.

  • Параметры

    • $ table — имя таблицы или массив ($ table, $ alias);

    • $ typeтип соединения (LEFT, RIGHT, INNER и т. д.,)

  • Returns — возвращает текущий экземпляр

Назначение — генерировать таблицы объединений запросов на выборку.

Параметры

$ table — имя таблицы или массив ($ table, $ alias);

$ typeтип соединения (LEFT, RIGHT, INNER и т. д.,)

Returns — возвращает текущий экземпляр

пример

$query = DB::select('name')->from('employee')->join('employee_salary') 
// select `name` from `employee` JOIN `employee_salary`

на

  • Назначение — создать условие объединений в запросах выбора.

  • Параметры

    • $ c1 — имя таблицы или имя таблицы с псевдонимом в массиве;

    • $ op — логический оператор;

    • $ c2 — имя таблицы или имя таблицы с псевдонимом в массиве

  • Returns — возвращает текущий экземпляр

Назначение — создать условие объединений в запросах выбора.

Параметры

$ c1 — имя таблицы или имя таблицы с псевдонимом в массиве;

$ op — логический оператор;

$ c2 — имя таблицы или имя таблицы с псевдонимом в массиве

Returns — возвращает текущий экземпляр

Например,

$query = DB::select('name')->from('employee')->join('employee_salary') 
$query = $query->on('employee.employee_id', '=', 'employee_salary.employee_id') 
// select `name` from `employee` JOIN `employee_salary` on 
// `employee.employee_id` = `employee_salary.employee_id`

Подобные методы

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

группа по

  • Цель — создать группу по запросам

  • Параметр$ columns — Имя столбца, по которому группируется результат

  • Returns — возвращает текущий экземпляр

Цель — создать группу по запросам

Параметр$ columns — Имя столбца, по которому группируется результат

Returns — возвращает текущий экземпляр

Например,

$query = DB::select('name')->from('employee')  
$query = $query->group_by('name'); 
// select `name` from `employee` group by `name`

имеющий

  • Назначение — сформировать группу по условиям SQL-запросов.

  • Параметр$ column — имя столбца или массив ($ column, $ alias); $ op — логические операторы, =,! =, IN, BETWEEN и LIKE, необязательно; $ value — значение столбца

  • Returns — возвращает текущий экземпляр

Назначение — сформировать группу по условиям SQL-запросов.

Параметр$ column — имя столбца или массив ($ column, $ alias); $ op — логические операторы, =,! =, IN, BETWEEN и LIKE, необязательно; $ value — значение столбца

Returns — возвращает текущий экземпляр

пример

$query = DB::select('name')->from('employee')
$query = $query->group_by('name');
$query = $query->having('name', '!=', 'Jon');
// select `name` from `employee` group by `name` having `name` != `Jon`

Подобные методы

Сходными методами являются имеющая_open () и and_having_open (), or_having_open (), обладающая_close () и_having_close () или or_having_close (). Они аналогичны имеющим методы (), за исключением того, что они добавляют дополнительные ключевые слова и скобки вокруг условий.

сброс

  • Цель — сбросить запрос

  • Параметр — Нет

  • Returns — возвращает текущий экземпляр

Цель — сбросить запрос

Параметр — Нет

Returns — возвращает текущий экземпляр

Например,

$query = DB::select('name')->from('employee')  
$query->reset() 
$query = DB::select('name')->from('employee_salary') 
// select `name` from `employee_salary`

DBUtil класс

Класс DBUtil предоставляет возможность управлять и выполнять рутинные операции с базой данных. Вот некоторые из важных методов:

  • set_connection — устанавливает соединение по умолчанию
DBUtil::set_connection('new_database');
  • create_database — создает базу данных.
DBUtil::create_database('my_database');
  • drop_database — удаляет базу данных.
DBUtil::drop_database('my_database');
  • table_exists — проверяет, существует ли данная таблица.
if(DBUtil::table_exists('my_table')) { 
   // Table exists 
} else { 
   // Table does NOT exist, create it! 
} 
  • drop_table — удаляет таблицу.
DBUtil::drop_table('my_table');
  • create_table — создает таблицу.
\DBUtil::create_table ( 
   'users', 
   array ( 
      'id' => array('type' => 'int', 'auto_increment' => true), 
      'name' => array('type' => 'text'), 
   ), 
); 

Orm Toolkit

FuelPHP предоставляет расширенный уровень базы данных, используя концепцию ORM, основанную на популярном шаблоне Active record . Инструментарий включен в приложение, но не настроен по умолчанию. Он упакован как пакет, а имя пакета — orm. Мы можем добавить следующую конфигурацию в основной файл конфигурации fuel / app / config / config.php для загрузки набора инструментов orm.

'always_load' => array ( 
   'packages' => array (
      'orm', 
   ), 
),

Создание моделей

Orm предоставляет базовую модель класса Orm \ Model. Нам нужно дополнить наши модели моделью orm для использования функций ORM. Ниже приведен пример кода.

class Model_Employee extends Orm\Model {}

конфигурация

Orm предоставляет набор параметров для настройки модели на использование функций ORM. Они заключаются в следующем —

connection — установить статическое свойство _connection в модели, чтобы указать имя соединения.

class Model_Employee extends Orm\Model { 
   protected static $_connection = "production"; 
}

имя таблицы — Установите статическое свойство _table_name в модели, чтобы указать имя таблицы бэкэнд-таблицы.

class Model_Employee extends Orm\Model { 
   protected static $_table_name = 'employee'; 
} 

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

class Model_Employee extends Orm\Model { 
   protected static $_primary_key = array('id'); 
} 

Столбцы — Установите статическое свойство _properties в модели, чтобы указать столбцы внутренней таблицы. Он поддерживает data_type, метку, валидацию, элементы формы и т. Д.

class Model_Employee extends Orm\Model { 
   protected static $_properties = array ( 
      'id',  
      'name' => array ( 
         'data_type' => 'varchar', 
         'label' => 'Employee Name', 
         'validation' => array ( 
            'required',  
            'min_length' => array(3),  
            'max_length' > array(80) 
         ), 
         
         'form' => array ( 
            'type' => 'text' 
         ), 
      ),  

      'age' => array ( 
         'data_type' => 'int', 
         'label' => 'Employee Age', 
         'validation' => array ( 
            'required',  
         ),  
         
         'form' => array ( 
            'type' => 'text' 
         ), 
      ),  
   ); 
}

Условия — Установите статическое свойство _conditions, чтобы задать условия и порядок по опциям.

class Model_Employee extends Orm\Model { 
   protected static $_conditions = array ( 
      'order_by' => array('id' => 'desc'), 
      'where' => array ( 
         array('is_active', > true), 
      ), 
   ); 
}

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

class Model_Employee { 
   protected static $_observers = array ( 
      'example',  // will call Observer_Example class for all events 
      'Orm\\Observer_CreatedOn' => array ( 
         'events' => array('before_insert'),  
         // will only call Orm\Observer_CreatedOn at before_insert event 
      ) 
   ); 
} 

Создайте

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

// option 1 
$new = new Model_Employee(); 
$new->name = 'Jon'; 
$new->save();  

// option 2, use forge instead of new 
$new = Model_Employee::forge();
$new->name = 'Jon'; 
$new->save();  

// option 3, use array for properties 
$props = array('name' => 'Jon'); 
$new = Model_Employee::forge($props); 
$new>save();

Читать

Orm предоставляет метод find для получения данных из базы данных и привязки к объекту. Метод find работает в зависимости от входного параметра. Давайте посмотрим на различные варианты —

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

$employee = Model_Employee::find(1);

первая / последняя запись — указание ‘first’ или ‘last’ приведет к получению первой или последней записи соответственно. Мы также можем передать заказ по желанию.

$entry = Model_Employee::find('first'); 
$entry = Model_Article::find('last', array('order_by' => 'id'));

All — при указании «all» все записи будут выбраны из настроенной таблицы. Мы можем указать порядок как вариант, так и условия.

$entry = Model_Employee::find('all');  
$entry = Model_Article::find ('all', array ( 
   'where' => array ( 
      array ('name', 'Jon'), 
   ), 
   'order_by' => array ('id' => 'desc'), 
));

Мы можем использовать Query API базового инструментария базы данных вместе с моделью для расширенного поиска следующим образом.

$query = Model_Employee::query()->where('category_id', 1)->order_by('date', 'desc');
$number_of_employees = $query->count(); 
$latest_employee = $query->max('id'); 
$young_employee = $query->min('age'); 
$newest_employee = $query->get_one(); 
$employees = $query->limit(15)->get();

Обновить

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

$entry = Model_Employee:find(4);
$entry->name = 'Peter'; 
$entry->save();

удалять

Orm предоставляет метод удаления для удаления модели. Просто выберите объект и вызовите метод delete.

$entry = Model_Employee:find(4); 
$entry->delete();

Рабочий пример

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

Создать базу данных

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

create database tutorialspoint_fueldb

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

create table employee(id int primary key, name varchar(20), age int not null);

Настройте базу данных

Давайте настроим базу данных, используя файл конфигурации базы данных * fuel / app / config / db.php. Добавьте следующие изменения для подключения к серверу MySQL.

<?php  
   return array ( 
      'development' => array ( 
         'type'           => 'mysqli', 
         'connection'     => array ( 
            'hostname'       => 'localhost', 
            'port'           => '3306', 
            'database'       => 'tutorialspoint_fueldb', 
            'username'       => 'root', 
            'password'       => 'pass', 
            'persistent'     => false, 
            'compress'       => false, 
         ), 
         
         'identifier'     => '`', 
         'table_prefix'   => '', 
         'charset'        => 'utf8', 
         'enable_cache'   => true, 
         'profiling'      => false, 
         'readonly'       => false, 
      ),  
      
      'production' => array ( 
         'type'           => 'mysqli', 
         'connection'     => array ( 
            'hostname'       => 'localhost', 
            'port'           => '3306', 
            'database'       => 'tutorialspoint_fueldb', 
            'username'       => 'root', 
            'password'       => 'pass', 
            'persistent'     => false, 
            'compress'       => false, 
         ), 
         
         'identifier'     => '`', 
         'table_prefix'   => '', 
         'charset'        => 'utf8', 
         'enable_cache'   => true, 
         'profiling'      => false, 
         'readonly'       => false, 
      ), 
   );

Включить пакет ORM

Обновите основной файл конфигурации fuel / app / config / config.php, чтобы включить пакет ORM, добавив следующую конфигурацию.

'always_load' => array ( 
   'packages' => array ( 
      'orm' 
   ), 
),

Теперь ORM включен в вашем приложении

Создать модель сотрудника

Создайте новую модель Employee в папке модели «fuel / app / classes / model» . Это определяется следующим образом.

Employee.php

<?php  
   class Model_Employee extends Orm\Model { 
      protected static $_connection = 'production'; 
      protected static $_table_name = 'employee'; 
      protected static $_primary_key = array('id'); 
      protected static $_properties = array ( 
         'id',  
         'name' => array ( 
            'data_type' => 'varchar', 
            'label' => 'Employee Name', 
            'form' => array (
               'type' => 'text' 
            ), 
         ),  
         
         'age' => array ( 
            'data_type' => 'int', 
            'label' => 'Employee Age', 
            'form' => array ( 
               'type' => 'text' 
            ), 
         ),  
      ); 
   } 

Создать действие

Создайте новое действие action_model в контроллере Employee, расположенном в fuel / app / classes / controller / employee.php, следующим образом.

class Controller_Employee extends Controller { 
   public function action_model() { 
      
      // db based sql command to delete all employees 
      $query = db::query('delete from `employee`'); 
      $query->execute('production');  
      
      // orm based query to add new employees 
      $model = new model_employee(); 
      $model->name = "john"; 
      $model->age = 25; 
      $model->save();  
      $model = new model_employee(); 
      $model->name = "peter"; 
      $model->age = 20; 
      $model->save(); 
      
      // orm based query to fetch all employee data 
      $data = array(); 
      $data['emps'] = model_employee::find('all');  
      return response::forge(view::forge('employee/model', $data)); 
   } 
} 

Создать вид

Теперь создайте файл представления model.php, расположенный в «fuel / app / views / employee» . Добавьте следующие изменения в файл.

<ul> 
   <?php 
      foreach($emps as $emp) {  
   ?> 
   <li><?php echo $emp['name']; ?></li> 
   
   <?php 
   } 
   ?> 
</ul> 

Теперь запросите URL http: // localhost: 8080 / employee / model, и он даст следующий результат.

Результат

Создать модель представления

FuelPHP — Программирование форм

FuelPHP предоставляет три класса, Form Fieldset ,, и Input ,, для выполнения программирования формы.

  • Класс Form предоставляет возможность создавать все элементы HTML-форм.

  • Класс Fieldset предоставляет возможность создания html-элемента с помощью методов более высокого уровня, интеграции моделей и проверки.

  • Входной класс обеспечивает возможность анализа данных, отправленных через HTML-формы, а также параметров http, серверных переменных и пользовательских агентов.

Класс Form предоставляет возможность создавать все элементы HTML-форм.

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

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

В этой главе мы изучим программирование форм в FuelPHP.

форма

Как обсуждалось ранее, класс Form предоставляет методы для создания HTML-элементов формы, а важные методы следующие:

открыть()

open () используется для создания новой формы. Это обеспечивает следующие два параметра —

  • $ attribute — атрибуты тега формы в виде массива или просто URL-адрес действия в виде строки.

  • $ hidden — массив имен скрытых полей и их значений.

$ attribute — атрибуты тега формы в виде массива или просто URL-адрес действия в виде строки.

$ hidden — массив имен скрытых полей и их значений.

echo Form::open('/employee/add'); 
echo Form::open(array('action' => '/employee/add', 'method' => 'post'));

близко()

close () просто закрывает форму.

echo Form::close();

вход ()

input () создает элемент ввода html. Он имеет следующие три параметра,

  • $ field — имя элемента ввода

  • $ value — значение элемента ввода

  • $ attribute — атрибуты входного элемента в виде массива

$ field — имя элемента ввода

$ value — значение элемента ввода

$ attribute — атрибуты входного элемента в виде массива

echo Form::input('name', 'jon', array('style' => 'border: 20px;'));

элемент метки

label создает элемент метки html. Он имеет следующие три параметра,

  • $ label — метка для показа

  • $ id — идентификатор элемента связанной формы

  • $ attribute — атрибуты элемента метки в виде массива

$ label — метка для показа

$ id — идентификатор элемента связанной формы

$ attribute — атрибуты элемента метки в виде массива

echo Form::label('Employee Name', 'employee_name');

скрытый

Параметр hidden похож на метод ввода, за исключением того, что он устанавливает тип элемента input как скрытый.

пароль

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

радио

Радио похоже на метод ввода, за исключением того, что оно устанавливает тип элемента ввода на радио. Он имеет следующие четыре параметра,

  • $ field — имя элемента ввода

  • $ value — значение элемента ввода

  • $ флажок — проверяется или нет элемент (true / false)

  • $ attribute — атрибуты входного элемента в виде массива

$ field — имя элемента ввода

$ value — значение элемента ввода

$ флажок — проверяется или нет элемент (true / false)

$ attribute — атрибуты входного элемента в виде массива

echo Form::label('Male', 'gender'); 
echo Form::radio('gender', 'Male', true); 
echo Form::label('Female', 'gender'); 
echo Form::radio('gender', 'Female');

флажок

флажок похож на метод ввода, за исключением того, что устанавливает тип элемента ввода на флажок. Он имеет следующие четыре параметра,

  • $ field — имя элемента ввода

  • $ value — значение элемента ввода

  • $ флажок — проверяется или нет элемент (true / false)

  • $ attribute — атрибуты входного элемента в виде массива

$ field — имя элемента ввода

$ value — значение элемента ввода

$ флажок — проверяется или нет элемент (true / false)

$ attribute — атрибуты входного элемента в виде массива

echo Form::label('Male', 'gender'); 
echo Form::checkbox('gender', 'Male', true);
echo Form::label('Female', 'gender'); 
echo Form::checkbox('gender', 'Female');

файл

Файл аналогичен методу ввода, за исключением того, что он устанавливает тип элемента ввода для файла.

TextArea

textarea создает html элемент textarea. Он имеет следующие три параметра,

  • $ field — имя элемента textarea

  • $ value — значение элемента textarea

  • $ attribute — атрибуты элемента textarea в виде массива

$ field — имя элемента textarea

$ value — значение элемента textarea

$ attribute — атрибуты элемента textarea в виде массива

echo Form::textarea ('description', 'original data (value)', array ('rows' => 6, 
      'cols' => 8)); 

Выбрать

select создает элемент выбора HTML. Он имеет следующие четыре параметра —

  • $ field — имя выбранного элемента

  • $ values — начальные значения выбора

  • $ options — параметры в виде массива. Параметры могут быть сгруппированы с использованием вложенного массива

  • $ attribute — атрибуты входного элемента в виде массива

$ field — имя выбранного элемента

$ values — начальные значения выбора

$ options — параметры в виде массива. Параметры могут быть сгруппированы с использованием вложенного массива

$ attribute — атрибуты входного элемента в виде массива

echo Form::select ( 
   'country',  
   'none',  
   array ( 
      'none'  => 'None', 
      'asia'  => array ( 
         'in' > 'India', 
         'cn' => 'China' 
      ), 
      
      'us' => 'United States' 
   ) 
);

Отправить

submit аналогичен методу ввода, но устанавливает тип элемента ввода для отправки.

кнопка

Кнопка создает элемент кнопки HTML. Он имеет следующие три параметра,

  • $ field — имя элемента кнопки

  • $ value — значение элемента кнопки

  • $ attribute — атрибуты элемента кнопки в виде массива

$ field — имя элемента кнопки

$ value — значение элемента кнопки

$ attribute — атрибуты элемента кнопки в виде массива

echo Form::button('emp_submit', 'Submit');

сброс

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

fieldset_open

fieldset_open создает набор полей html и элементы легенды. Он имеет следующие два параметра —

  • attribute — атрибуты элемента fieldset в виде массива

  • легенда — название легенды для создания

attribute — атрибуты элемента fieldset в виде массива

легенда — название легенды для создания

// returns <fieldset class = "example-class" id = "example-id">
<legend>
   Custom Legend
</legend> 

echo Form::fieldset_open (array (
   'class'  => 'example-class', 
   'id'     => 'exampleid', 
   'legend' => 'Custom Legend'
));

fieldset_close

fieldset_close создает закрывающий тег набора полей HTML.

// returns </fieldset> 
echo Form::fieldset_close(); 

Входной класс

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

URI

URI возвращает текущий URI запроса

// request: http://localhost:8080/employee/welcome  
echo Input::uri(); // return /employee/welcome

метод

метод возвращает HTTP-метод, использованный в запросе

echo Input::method() // "POST"

получить

get позволяет читать переменные $ _GET. Он имеет следующие два параметра,

  • $ index — индекс массива $ _GET

  • $ default — значение по умолчанию, если индекс не найден.

$ index — индекс массива $ _GET

$ default — значение по умолчанию, если индекс не найден.

echo Input::get('age', '20'); // returns $_GET['age']

сообщение

пост позволяет читать переменные $ _POST. Он имеет следующие два параметра,

  • $ index — индекс массива $ _POST

  • $ default — значение по умолчанию, если индекс не найден

$ index — индекс массива $ _POST

$ default — значение по умолчанию, если индекс не найден

echo Input::get('age', '20'); // returns $_POST['age']

пары

Параметр param позволяет получить элемент из переменных $ _GET, $ _POST, $ _PUT или $ _DELETE. Он имеет следующие два параметра,

  • $ index — индекс массива

  • $ default — значение по умолчанию, если индекс не найден

$ index — индекс массива

$ default — значение по умолчанию, если индекс не найден

Если параметр не указан, он вернет все элементы.

echo Input::param('age', '20'); // returns $_POST['age']

файл

Файл позволяет читать переменные $ _FILE. Он имеет следующие два параметра,

  • $ index — индекс массива $ _POST

  • $ default — значение по умолчанию, если индекс не найден

$ index — индекс массива $ _POST

$ default — значение по умолчанию, если индекс не найден

echo Input::file();

is_ajax

is_ajax возвращает true, если запрос сделан через AJAX.

echo Input::is_ajax() // return false

протокол

protocol возвращает протокол HTTP, использованный в запросе.

echo Input::protocol() // returns "HTTP"

IP

ip возвращает IP-адрес, через который сделан запрос.

echo Input::ip() // returns "84.45.34.24" (Public IP Address)

real_ip

real_ip пытается вернуть реальный IP-адрес (если клиент находится за прокси), через который сделан запрос.

echo Input::real_ip() // returns "10.76.12.1" (local private IP Address)

сервер

Сервер позволяет читать переменные $ _SERVER. Он имеет следующие два параметра,

  • $ index — индекс массива $ _POST

  • $ default — значение по умолчанию, если индекс не найден.

$ index — индекс массива $ _POST

$ default — значение по умолчанию, если индекс не найден.

echo Input::server('HTTP_HOST'); // returns localhost:8080

ссылающейся

реферер возвращает реферер из переменной $ _SERVER. Это быстрый способ получить ссылку http текущего запроса.

user_agent

user_agent возвращает пользовательский агент из переменной $ _SERVER. Это быстрый способ получить пользовательский агент http текущего запроса.

Строка запроса

query_string возвращает строку запроса из переменной $ _SERVER. Это быстрый способ получить строку запроса текущего запроса.

заголовки

Заголовки возвращают определенный или все заголовки. Он имеет следующие два параметра —

  • $ index — имя заголовка HTTP

  • $ default — значение по умолчанию, если индекс не найден.

$ index — имя заголовка HTTP

$ default — значение по умолчанию, если индекс не найден.

echo Input::headers('Content-Type'); // returns "text/html"

расширение

extension возвращает расширение URI текущего запроса.

// Example URL: http://localhost/test/ 
echo Input::extension();  // NULL  

// Example URL: http://localhost/test.html 
echo Input::extension();  // 'html'

Рабочий пример

Давайте создадим простую форму для добавления нового сотрудника, используя класс Form и Input.

Создать форму

Создайте новое действие get_add в контроллере сотрудника следующим образом.

public function get_add() { 
   return Response::forge(View::forge('employee/add')); 
} 

Теперь добавьте view для action, fuel / app / views / employee / add.php следующим образом.

<!DOCTYPE html> 
<html lang = "en"> 
   <head> 
      <title>Employee :: add page</title> 
      <meta charset = "utf-8"> 
      <meta name = "viewport" content = "width = device-width, initial-scale = 1"> 
      <?php echo Asset::css('bootstrap.css'); ?> 
   </head>
   
   <body> 
      <div class = "container"> 
         <?php 
            echo Form::open(array('action' => 'employee/add', 'method' => 'post')); 
         ?>  
         
         <div class = "form-group"> 
            <?php 
               echo Form::label('Employee name:', 'name'); 
               echo Form::input('name', '', array('class' => 'form-control')); 
            ?> 
         </div> 
         
         <div class = "form-group"> 
            <?php 
               echo Form::label('Employee age:', 'age'); 
               echo Form::input('age', '', array('class' => 'form-control')); 
            ?> 
         </div> 
         
         <?php echo Form::button('frmbutton', 'Submit', array(
            'class' => 'btn btn-default')); 
         ?> 
         
         <?php 
            echo Form::close(); 
         ?> 
      </div> 
   </body> 
   
</html>

Здесь мы использовали bootstrap для разработки формы. FuelPHP обеспечивает полную поддержку компонентов начальной загрузки. Теперь, запрашивая страницу, http: // localhost: 8080 / employee / add покажет следующую форму.

Дизайн формы

Форма процесса

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

public function post_add() { 
   $name = Input::post('name'); 
   $age = Input::post('age'); 
   $model = new model_employee(); 
   $model->name = $name; 
   $model->age = $age; 
   $model->save();  
   Response::redirect('employee/list'); 
}

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

Список сотрудников

Создайте новое действие action_list, чтобы перечислить сотрудника в базе данных следующим образом.

public function action_list() { 
   $data = array(); 
   $data['emps'] = model_employee::find('all');
   return Response::forge(view::forge('employee/list', $data)); 
}

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

<ul> 
   <?php 
      foreach($emps as $emp) {  
   ?> 
   <li><?php echo $emp['name']; ?></li> 
   <?php 
   } 
   ?> 
</ul> 

Проверьте форму

Теперь запросите URL-адрес http: // localhost: 8080 / employee / add , введите некоторые данные о сотрудниках, как показано на следующем снимке экрана, и отправьте форму.

Данные сотрудника

Затем он показывает всех сотрудников (включая недавно добавленного), доступных в базе данных, следующим образом:

База данных

FuelPHP — валидация

Валидация — одна из самых частых и повторяющихся задач в веб-приложении. Пользователь вводит необходимые данные в форму и отправляет их. Затем веб-приложение должно проверить данные перед обработкой данных. Например, пользователь вводит данные сотрудника, и post_action необходимо проверить перед сохранением в базе данных. Для этой цели FuelPHP предлагает действительно простой класс Validation.

В FuelPHP концепция проверки очень проста, и она предоставляет различные методы через класс Validation для правильной проверки формы. Ниже приводится рабочий процесс проверки,

Шаг 1 — Создайте новый объект валидации, используя метод forge .

$val = Validation::forge();

Шаг 2 — Добавьте поля, которые необходимо проверить, используя метод add.

$val->add('name', 'Employee name');

Шаг 3 — Установите правила проверки для добавленных полей, используя метод add_rule .

$val->add('name', 'Employee name')->add_rule('required'); 
$val->add('age', 'Employee age')->add_rule('required') 
   ->add_rule('numeric_min', 20) 
   ->add_rule('numeric_max', 30); 

Шаг 4 — Вызовите метод run для проверки данных.

// run validation on just post 
if ($val->run()) { 
   // success 
} else { 
   // falier 
} 

Шаг 5 — Используйте validated и error, чтобы получить действительные и недействительные поля соответственно.

$vars = $val->validated(); 
$vars = $val->error();

правила

FuelPHP содержит множество правил для проверки, а также предоставляет возможность создавать новые правила. Правила, поддерживаемые классом Validation:

  • требуется — значение для ввода

  • required_with — установить другое поле в качестве сопутствующего поля. Если поле установлено, то поля-компаньоны также должны быть установлены

  • match_value — устанавливает значение для сопоставления со значением поля

  • match_pattern — устанавливает значение для сопоставления как регулярное выражение со значением поля

  • match_field — установить значение другого поля в качестве значения для сопоставления со значением поля

  • match_collection — устанавливает значение для сопоставления как коллекции со значением поля

  • min_length — устанавливает минимальную длину значения поля

  • max_length — устанавливает максимальную длину значения поля

  • точная длина — установить точную длину значения поля

  • valid_date — устанавливает значение поля на правильную дату

  • valid_email — установить значение поля в действительный адрес электронной почты

  • valid_emails — установить значение поля в действительные электронные письма, разделенные запятой

  • valid_url — установить значение поля в действительный URL

  • valid_ip — установить значение поля в действительный IP

  • numeric_min — установить минимальное значение значения поля

  • numeric_max — устанавливает максимальное значение значения поля

  • numeric_between — устанавливает минимальное и максимальное значение значения поля

  • valid_stringпохож на регулярное выражение, но проще

требуется — значение для ввода

required_with — установить другое поле в качестве сопутствующего поля. Если поле установлено, то поля-компаньоны также должны быть установлены

match_value — устанавливает значение для сопоставления со значением поля

match_pattern — устанавливает значение для сопоставления как регулярное выражение со значением поля

match_field — установить значение другого поля в качестве значения для сопоставления со значением поля

match_collection — устанавливает значение для сопоставления как коллекции со значением поля

min_length — устанавливает минимальную длину значения поля

max_length — устанавливает максимальную длину значения поля

точная длина — установить точную длину значения поля

valid_date — устанавливает значение поля на правильную дату

valid_email — установить значение поля в действительный адрес электронной почты

valid_emails — установить значение поля в действительные электронные письма, разделенные запятой

valid_url — установить значение поля в действительный URL

valid_ip — установить значение поля в действительный IP

numeric_min — установить минимальное значение значения поля

numeric_max — устанавливает максимальное значение значения поля

numeric_between — устанавливает минимальное и максимальное значение значения поля

valid_stringпохож на регулярное выражение, но проще

$val->add('username', 'User name')->add_rule('valid_string', array('alpha, dots');

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

Рабочий пример

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

public function post_add() { 
   $val = Validation::forge(); 
   $val->add('name', 'Employee name')->add_rule('required'); 
   $val->add('age', 'Employee age')->add_rule('required')
      ->add_rule('numeric_min', 20) 
      ->add_rule('numeric_max', 30);  
   
   if ($val->run()) { 
      $name = Input::post('name'); 
      $age = Input::post('age');  
      $model = new model_employee(); 
      $model->name = $name; 
      $model->age = $age; 
      $model->save();  
      Response::redirect('employee/list'); 
   } else { 
      Response::redirect('employee/add'); 
   } 
}

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

FuelPHP — Расширенное программирование форм

FuelPHP обеспечивает расширенное программирование форм с помощью классов Fieldset и Fieldset_Field. Fieldset предоставляет объектно-ориентированный способ создания формы. Имеет полную поддержку моделей. Он имеет встроенную поддержку для проверки на стороне клиента и на стороне сервера. Чтобы создать полноценную форму, достаточно создать модель с правильной формой и настройкой валидации. Давайте узнаем о классе Fieldset и о том, как создать форму, используя его в этой главе.

Fieldset

Fieldset — это коллекция объектов Fieldset_Field . Fieldset_Field определяет отдельную запись формы, такую ​​как имя, фамилия и т. Д., А также проверки. В классе Fieldset есть методы для добавления / редактирования / удаления полей. У него есть опции для идентификации полей, определенных в модели, и создания полей из данной модели. Fieldset использует классы Form и Validation в фоновом режиме для выполнения реальной работы. Давайте рассмотрим некоторые важные методы класса Fieldset.

ковать

forge создает новый экземпляр Fieldset. Он имеет следующие два параметра —

  • $ name — идентификатор для набора полей

  • $ config — конфигурационный массив. Возможные варианты: validation_instance и form_instance. validation_instance может иметь объект Validation, а form_instance может иметь объект Form.

$ name — идентификатор для набора полей

$ config — конфигурационный массив. Возможные варианты: validation_instance и form_instance. validation_instance может иметь объект Validation, а form_instance может иметь объект Form.

$employee_form = Fieldset::forge('employee');

пример

instance возвращает ранее созданный экземпляр Fieldset по идентификатору.

$employee_form = Fieldset::instance('employee');

get_name

Получает идентификатор экземпляра fieldset.

$employee_form = Fieldset::forge('employee'); 
$name = $employee_form->get_name();

добавлять

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

  • $ name — название поля

  • $ label — метка для поля

  • $ attributeатрибуты HTML-тегов

  • $ rules — правила проверки

$ name — название поля

$ label — метка для поля

$ attributeатрибуты HTML-тегов

$ rules — правила проверки

$employee_field = $employee_form-> add (
   'employee_lastname', 
   'Lastname', 
   array ('class' => 'pretty_input')
);  

// with validation rules 
$employee_form->add ( 
   'email', 'E-mail', 
   array('type' => 'email', 'class' => 'pretty_input'), 
   array('required', 'valid_email') 
);

add_before

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

$employee_form->add_before (
   'employee_firstname', 
   'Firstname', 
   array ('class' => 'pretty_input'), 
   array(), 
   'employee_lastname'
);

удалять

Удалить удаляет указанное поле из набора полей.

$employee_form->delete('employee_firstname');

поле

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

$fields = $employee_form->field(); 
$lastname_field = $employee_form->field('employee_lastname'); 

строить

build это псевдоним для $ this-> form () -> build () . Создает HTML-разметку формы.

$employee_form->build(Uri::create('employee/add'));

включить

enable — повторно включает поле, которое было ранее отключено.

$employee_form->enable('employee_firstname');

запрещать

disable позволяет отключить построение поля в наборе полей.

$employee_form->disable('employee_firstname');

форма

form возвращает экземпляр Form текущего набора полей.

$form = employee_form->form();

add_model

add_model добавляет поле модели в набор полей. Он имеет следующие три параметра,

  • $ class — имя класса

  • $ instance — экземпляр класса для заполнения полей значением

  • $ method — имя метода в классе. Этот метод используется для добавления полей в fieldset. Orm \ Model имеет требуемый метод. Имя метода по умолчанию — set_form_fields.

$ class — имя класса

$ instance — экземпляр класса для заполнения полей значением

$ method — имя метода в классе. Этот метод используется для добавления полей в fieldset. Orm \ Model имеет требуемый метод. Имя метода по умолчанию — set_form_fields.

$employee_form = Fieldset::forge('employee'); 
$employee_form->add_model('Model_Employee');

населять

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

$emp = new Model_Employee(); 
$emp->name = "Jon"; 
$employee_form->populate($emp);

населить

repopulate — то же самое, что и заполнить, за исключением того, что он повторно заполняет поля в наборе полей.

Проверка

validation получает экземпляр проверки текущего набора полей.

$validation = $employee_form->validation();

подтверждено

Псевдоним для $ this-> validation () -> validated ().

вход

Псевдоним для $ this-> validation () -> input ().

ошибка

Псевдоним для $ this-> validation () -> error ().

show_errors

Псевдоним для $ this-> validation () -> show_errors ().

Рабочий пример

Давайте создадим расширенную форму для добавления нового сотрудника в нашем примере приложения для сотрудников с помощью класса Fieldset.

Обновить модель

Обновите модель сотрудника с необходимыми правилами проверки и добавьте наблюдателя проверки следующим образом.

<?php  
   class Model_Employee extends Orm\Model { 
      protected static $_connection = 'production'; 
      protected static $_table_name = 'employee'; 
      protected static $_primary_key = array('id'); 
      
      protected static $_properties = array ( 
         'id',  
         'name' => array ( 
            'data_type' => 'varchar',
            'label' => 'Employee Name', 
            'validation' => array ( 
               'required',  
               'min_length' => array(3),  
               'max_length' => array(80) 
            ), 
            'form' => array ( 
               'type' => 'text' 
            ), 
         ),  
         'age' => array ( 
            'data_type' => 'int', 
            'label' => 'Employee Age', 
            'validation' => array ( 
               'required',  
            ), 
            'form' => array ('type' => 'text' ), 
         ), 
      );  
      
      // Just add the Observer, and define the required event 
      protected static $_observers = array('Orm\\Observer_Validation' => array ( 
         'events' => array('before_save'))); 
   } 

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

Создать форму

Создайте новое действие action_advancedform в контроллере сотрудника следующим образом.

public function action_advancedform() { 
   
   // create a new fieldset and add employee model
   $fieldset = Fieldset::forge('employee')->add_model('Model_Employee');  
   
   // get form from fieldset 
   $form = $fieldset->form();  
   
   // add submit button to the form 
   $form->add('Submit', '', array('type' => 'submit', 'value' => 'Submit'));  
   
   // build the form  and set the current page as action  
   $formHtml = $fieldset->build(Uri::create('employee/advancedform'));  
   
   // set form in data 
   $data = array(); 
   $data['form'] = $formHtml;  
   return Response::forge(View::forge('employee/advancedform', $data, false)); 
}   

Здесь мы создали форму с использованием fieldset и отправили форму в представление. Затем добавьте представление для действия fuel / app / views / employee / advancedform.php следующим образом.

<!DOCTYPE html> 
<html lang = "en"> 
   
   <head> 
      <title>Employee :: add page</title> 
      <meta charset = "utf-8"> 
      <meta name = "viewport" content = "width = device-width, initial-scale = 1"> 
      <?php echo Asset::css('bootstrap.css'); ?> 
      
      <style>  
         table { 
            width: 90%; 
         }  
         table tr { 
            width: 90% 
         }
         table tr td { 
            width: 50% 
         }  
         input[type = text], select { 
            width: 100%; 
            padding: 12px 20px; 
            margin: 8px 0; 
            display: inline-block; 
            border: 1px solid #ccc; 
            border-radius: 4px; 
            box-sizing: border-box; 
         }  
         input[type = submit] { 
            width: 100%; 
            background-color: #3c3c3c; 
            color: white; 
            padding: 14px 20px; 
            margin: 8px 0; 
            border: none; 
            border-radius: 4px; 
            cursor: pointer; 
         }  
         div { 
            border-radius: 5px; 
            background-color: #f2f2f2; 
            padding: 20px; 
         } 
      </style> 
   </head> 
   
   <body> 
      <div class = "container"> 
         <?php
            if(isset($errors)) { 
               echo $errors; 
            } 
            echo $form; 
         ?> 
      </div> 
   </body> 
   
</html>

Теперь при запросе страницы http: // localhost: 8080 / employee / add отобразится следующая форма.

Добавить страницу

Форма процесса

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

public function action_advancedform() { 
   
   // create a new fieldset and add employee model 
   $fieldset = Fieldset::forge('employee')->add_model('Model_Employee');  
   
   // get form from fieldset 
   $form = $fieldset->form();  
   
   // add submit button to the form 
   $form->add('Submit', '', array('type' => 'submit', 'value' => 'Submit')); 
   
   // build the form  and set the current page as action  
   $formHtml = $fieldset->build(Uri::create('employee/advancedform'));  
   
   if (Input::param() != array()) { 
      try { 
         $article = Model_Employee::forge(); 
         $article->name = Input::param('name'); 
         $article->url = Input::param('age'); 
         $article->save(); 
         Response::redirect('employee/list'); 
      
      } 
      catch (Orm\ValidationFailed $e) { 
         $view = View::forge('employee/advancedform'); 
         $view->set('form', $formHtml, false); 
         $view->set('errors', $e->getMessage(), false); 
      } 
   } 
   
   return Response::forge($view); 
}

Здесь мы были перенаправлены на страницу со списком сотрудников, когда введенные пользователем данные проверены и сохранены в базе данных. В противном случае нам снова будет показана форма.

Создать форму

Теперь запросите URL, http: // localhost: 8080 / employee / add, введите некоторые данные о сотрудниках и отправьте форму. Если данные не предоставлены, то форма предложит пользователю ввести данные, как показано на следующем снимке экрана.

Данные отсутствуют

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

Счастье клиента

Если данные прошли проверку на стороне клиента и на сервере, то данные сотрудника будут сохранены в базе данных, и страница будет перенаправлена ​​на страницу списка.

FuelPHP — загрузка файлов

Загрузка файлов является одной из наиболее часто используемых функций в программировании форм. FuelPHP предоставляет специальный класс Upload для обработки загрузки файлов. Давайте узнаем, как загрузить файл с помощью класса Upload в этой главе.

конфигурация

Класс загрузки может быть настроен с использованием отдельного файла конфигурации fuel / app / config / upload.php . Важные записи конфигурации следующие:

  • max_size — устанавливает максимальный размер файла для загрузки. «0» означает неограниченный размер загрузки

  • ext_whitelist — устанавливает допустимые расширения файлов

  • ext_blacklist — устанавливает запрещенные расширения файлов

  • type_whitelist — устанавливает допустимые типы файлов. Например, «текст» для MIME типа «текст / обычный»

  • type_blacklist — устанавливает запрещенные типы файлов

  • mime_whitelist — устанавливает разрешенные типы файлов MIME. Например, «текст / обычный»

  • mime_blacklist — устанавливает запрещенные типы файлов MIME.

  • префикс — строка префикса в имени файла при сохранении загруженного файла на сервер

  • суффикс — строка с суффиксом в имени файла при сохранении загруженного файла на сервер

  • extension — расширение загружаемого файла для установки

  • create_path — создавать ли путь к файлу, если он недоступен

  • перезаписать — перезаписать существующий файл при сохранении загруженного файла

  • auto_rename — переименовывать ли файл путем добавления порядкового номера при сохранении загруженного файла

  • randomize — создавать ли случайное 32-символьное имя для сохранения загруженного файла

max_size — устанавливает максимальный размер файла для загрузки. «0» означает неограниченный размер загрузки

ext_whitelist — устанавливает допустимые расширения файлов

ext_blacklist — устанавливает запрещенные расширения файлов

type_whitelist — устанавливает допустимые типы файлов. Например, «текст» для MIME типа «текст / обычный»

type_blacklist — устанавливает запрещенные типы файлов

mime_whitelist — устанавливает разрешенные типы файлов MIME. Например, «текст / обычный»

mime_blacklist — устанавливает запрещенные типы файлов MIME.

префикс — строка префикса в имени файла при сохранении загруженного файла на сервер

суффикс — строка с суффиксом в имени файла при сохранении загруженного файла на сервер

extension — расширение загружаемого файла для установки

create_path — создавать ли путь к файлу, если он недоступен

перезаписать — перезаписать существующий файл при сохранении загруженного файла

auto_rename — переименовывать ли файл путем добавления порядкового номера при сохранении загруженного файла

randomize — создавать ли случайное 32-символьное имя для сохранения загруженного файла

Методы загрузки

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

  • field — Имя поля формы

  • name — имя загруженного файла

  • type — тип файла, определенный браузером

  • mimetype — тип файла, определенный классом Upload.

  • file — Полное имя временного расположения загружаемого файла

  • filenameимя файла загруженного файла

  • extension — расширение загружаемого файла

  • размер — размер загружаемого файла в байтах

  • ошибки — массив ошибок с кодом ошибки и сообщением

  • error — устанавливать ли ошибки массива, почему загрузка не удалась (в случае неудачи при загрузке)

field — Имя поля формы

name — имя загруженного файла

type — тип файла, определенный браузером

mimetype — тип файла, определенный классом Upload.

file — Полное имя временного расположения загружаемого файла

filenameимя файла загруженного файла

extension — расширение загружаемого файла

размер — размер загружаемого файла в байтах

ошибки — массив ошибок с кодом ошибки и сообщением

error — устанавливать ли ошибки массива, почему загрузка не удалась (в случае неудачи при загрузке)

После сохранения файлов на сервере массив результатов также будет содержать следующую информацию.

  • save_to — полностью определенный путь, куда был сохранен загруженный файл

  • save_as — имя файла, который был сохранен

  • ошибки — обновленный массив ошибок

save_to — полностью определенный путь, куда был сохранен загруженный файл

save_as — имя файла, который был сохранен

ошибки — обновленный массив ошибок

Теперь давайте посмотрим на метод класса Upload.

является действительным

is_valid возвращает true, если какой-либо действительный файл загружен пользователем.

// do we have any uploaded files to save? 
if (Upload::is_valid()) { 
   // process  
} 

get_files

get_files возвращает все загруженные файлы в виде многомерного массива. Если указан индекс / имя файла ввода формы, он вернет загруженный файл, относящийся только к указанному файлу ввода.

foreach(Upload::get_files() as $file) { 
   // do something with the file info 
}  
if ( Upload::get_files(0)) { 
   // do something 
}

get_errors

get_errors возвращает массив ошибок, если не удалось загрузить один или несколько файлов. Если указан индекс / имя имени для ввода файла формы, он вернет ошибку, относящуюся только к указанному файлу ввода.

foreach(Upload::get_errors() as $file) { 
   // do something with the file info 
}  
if (Upload::get_errors('myimage')) { 
   // do something 
} 

Процесс

Процесс относится к фактическому процессу сбора информации о загруженном файле. Мы можем предоставить новую пользовательскую конфигурацию, используя массив. Если конфигурация не указана, она будет использовать конфигурацию, определенную в fuel / app / config / upload.php

Upload::process (array( 
   'auto_rename' => false, 
   'overwrite'   => true 
));

спасти

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

Upload::save();
Upload::save(0);
Upload::save(0, 3); 

Рабочий пример

Давайте создадим новый контроллер Controller_Upload в нашем примере сотрудника, чтобы проверить функциональность загрузки.

Шаг 1 — Создайте файл fuel / app / classes / controller / upload.php . Создать контроллер загрузки.

<?php 
   class Controller_Upload extends Controller { 
   }

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

<?php  
   class Controller_Upload extends Controller { 
      public function get_index() { 
         return \View::forge("upload/index"); 
      } 
   }

Шаг 3 — Создайте новый вид для созданного действия.

<!DOCTYPE html> 
<html> 
   <body> 
   
      <form action = "/upload/index" method = "post" enctype = "multipart/form-data"> 
         Select image to upload: 
         <input type = "file" name = "fileToUpload" id = "fileToUpload"> 
         <input type = "submit" value = "Upload Image" name = "submit"> 
      </form>  
      
   </body> 
</html> 

Шаг 4 — Создайте новое действие post_action для обработки загруженного файла.

<?php  
   class Controller_Upload extends Controller { 
      public function get_index() { 
         return \View::forge("upload/index"); 
      }  
      public function post_index(){ 
         $config = array( 
            'path' => DOCROOT.'files', 
            'randomize' => true, 
            'ext_whitelist' => array('img', 'jpg', 'jpeg', 'gif', 'png'), 
         );  
         Upload::process($config);  
         // if there are any valid files 
         
         if (Upload::is_valid()) { 
            Upload::save(); 
            echo "success"; 
         } else { 
            // and process any errors 
            foreach (Upload::get_errors() as $file) { 
               echo var_dump($file); 
            } 
         } 
      } 
   }      

Наконец, запустите приложение, запросив URL, http: // localhost: 8080 / upload / index и попробуйте загрузить файл.

Результат

Загрузить файл

FuelPHP — Ajax

AJAX — это современная технология в веб-программировании. Он предоставляет опции для отправки и получения данных на веб-странице асинхронно, без обновления страницы. Давайте узнаем о программировании FuelPHP AJAX в этой главе.

Каркас FuelPHP предоставляет опции для идентификации того, является ли тип запроса AJAX или нет. Для этого у входного класса есть метод is_ajax () . Если сделан запрос AJAX, метод Input :: is_ajax возвращает true , в противном случае — false .

Этот метод используется для правильной обработки AJAX-запроса на стороне сервера.

if (Input::is_ajax()) {  
   // Ajax request  
} else {  
   // Normal request  
} 

Мы можем использовать json_encode для возврата ответа JSON. Мы можем объединить эти два метода, чтобы создать простое и понятное веб-приложение на основе AJAX.

Рабочий пример

Давайте добавим новую страницу ajax / index в приложение для сотрудников и попытаемся получить информацию о сотрудниках асинхронно.

Шаг 1 — Создайте новый контроллер Controller_Ajax в fuel / app / classes / controller / ajax.php.

<?php  
   class Controller_Ajax extends Controller { 
   } 

Шаг 2 — Создайте новое действие action_index следующим образом.

<?php  
   class Controller_Ajax extends Controller { 
      public function action_index() { 
         $emps = model_employee::find('all'); 
         $data = array(); 
         $i = 0; 
         
         foreach($emps as $emp) { 
            $data[$i] = array(); 
            $data[$i]['name'] = $emp['name']; 
            $data[$i]['age'] = $emp['age'];  
            $i = $i + 1; 
         }  
         if(\Input::is_ajax()) { 
            echo json_encode($data); 
         } else { 
            return \View::forge("ajax/index"); 
         } 
      } 
   }

Здесь, если запрос AJAX, мы выбираем информацию об ученике, кодируем ее как JSON и возвращаем. В противном случае мы просто визуализируем соответствующий вид.

Шаг 3 — Создайте соответствующий файл вида топлива / app / views / ajax / index.php следующим образом.

<html>
   <head>
      <script language = "javascript" src = "/assets/js/jquery-3.2.1.min.js"></script>
      
      <style>
         .table { border-collapse: collapse; }
         .table th, td {
            border-bottom: 1px solid #ddd;
            width: 250px;
            text-align: left;
            align: left;
         }
      </style>
   </head>
   
   <body>
      <a id = "loademployee" href = "#">Load employee information</a>
      </br> 
      </br>

      <table class = "table">
         <tbody id = "employee">
         </tbody>
      </table>
      
      <script language = "javascript">
         $(document).ready(function() {
            $("#loademployee").on("click", function(event) {
               $.ajax ({
                  url:        '/ajax/index',
                  type:       'POST',
                  dataType:   'json',
                  async:      true,

                  success: function(data, status) {
                     var e = $('<tr><th>Name</th><th>Age</th></tr>');
                     $('#employee').html('');
                     $('#employee').append(e);
                     
                     for(i = 0; i < data.length; i++) {
                        employee = data[i];
                        var e = $('<tr><td id = "name"></td><td id = "age"></td></tr>');
                        $('#name', e).html(employee['name']);
                        $('#age', e).html(employee['age']);
                        $('#employee').append(e);
                     }
                  },
                  
                  error : function(xhr, textStatus, errorThrown) {
                     alert('Ajax request failed.');
                  }
               });
            });  
         });
      </script>
   </body>
   
</html>

Здесь мы создали тег привязки (id: loademployee) для загрузки информации о сотруднике с помощью вызова AJAX. Вызов AJAX выполняется с использованием JQuery. Событие, прикрепленное к тегу loademployee, активируется, когда пользователь щелкает по нему. Затем он извлекает информацию о сотруднике с помощью вызова AJAX и динамически генерирует необходимый HTML-код.

Шаг 4 — Запустите приложение.

Наконец, запустите приложение, http: // localhost: 8000 / ajax / index и перейдите на вкладку «Загрузить информацию о сотрудниках».

Результат

Якорная вкладка

FuelPHP — HMVC Запрос

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

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

Создать запрос HMVC так же просто, как создать объект запроса с требуемым URL-адресом и вызвать метод execute следующим образом.

$list = Request::forge('employee/list/')->execute(); 
echo $list;  

$employee = Request::forge('employee/show/1')->execute(array('id' => '1')); 
echo $employee;

Рабочий пример

Давайте создадим новый контроллер, Controller_HMVC, чтобы протестировать функцию HMVC. Создайте файл fuel / app / classes / controller / hmvc.php и разместите следующий код.

<?php 
   class Controller_HMVC extends Controller { 
      public function action_index() { 
         echo Request::forge('employee/list')->execute(); 
      } 
   }

Здесь мы только что вызвали страницу сотрудника / списка через запрос HMVC и показали результат.

Результат

Список сотрудников

FuelPHP — Темы

Темы используются, чтобы включить несколько взглядов для приложения. Он предоставляет возможность пользователю / разработчику изменять внешний вид приложения, не нарушая функциональные возможности приложения. Приложение может иметь одну или несколько тем. Каждая тема живет в своей папке. Давайте узнаем, как создавать темы в этой главе.

Конфигурация темы

FuelPHP предоставляет отдельный файл конфигурации для тем, fuel / app / config / themes.php . Все связанные с темой настройки настраиваются в этом файле. Вот некоторые из основных настроек темы:

  • active — название активной темы

  • fallback — название резервной темы, если активная тема не найдена

  • paths — Массив пути для поиска и поиска тем

  • assets_folder — Как правило, активы должны быть внутри DOCPATH, чтобы они были доступны через Интернет. Это относится к папке ресурсов для тем внутри DOCPATH

  • view_ext — расширение файла представления темы

  • info_file_name — файл с расширенной информацией о темах

  • require_info_file — требуется ли файл информации о теме, info_file_name

  • use_modules — использовать текущий модуль или нет

active — название активной темы

fallback — название резервной темы, если активная тема не найдена

paths — Массив пути для поиска и поиска тем

assets_folder — Как правило, активы должны быть внутри DOCPATH, чтобы они были доступны через Интернет. Это относится к папке ресурсов для тем внутри DOCPATH

view_ext — расширение файла представления темы

info_file_name — файл с расширенной информацией о темах

require_info_file — требуется ли файл информации о теме, info_file_name

use_modules — использовать текущий модуль или нет

Простая настройка для файла темы заключается в следующем.

<?php  
   return array ( 
      'active' => 'tpthemes', 
      'fallback' => 'tpthemes', 
      'paths' => array ( 
         APPPATH.'themes', 
      ), 
      'assets_folder' => 'assets', 
      'view_ext' => '.html', 
      'require_info_file' => false, 
      'info_file_name' => 'themeinfo.php', 
      'use_modules' => false, 
   ); 

Здесь мы установили,

  • Название активной и резервной темы в виде тем
  • Путь к папке с темами как fuel / app / themes /
  • Путь к папке ресурсов как / public / assets / tpthemes /

Тематический класс

После завершения настройки мы можем использовать класс Theme, предоставленный FuelPHP, для выполнения функциональности темы. Сообщите нам о методах, доступных в классе Theme в этой главе.

пример

Метод экземпляра позволяет создать новую тему. Он имеет следующие два параметра,

  • $ name — название темы (необязательно)

  • $ config — массив конфигурации темы (такой же, как в разделе конфигурации)

$ name — название темы (необязательно)

$ config — массив конфигурации темы (такой же, как в разделе конфигурации)

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

$theme = \Theme::instance(); 
$theme = \Theme::instance('tpthemes'); 
$theme = \Theme::instance ('mytheme', array ( 
   'active' => 'mytheme', 'view_ext' => '.php')); 

ковать

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

$theme = \Theme::forge (array( 
   'active'   => 'tpthemes', 
   'fallback' => 'tpthemes', 
   'view_ext' => '.php', 
));

Посмотреть

Метод view использует View :: forge () в фоновом режиме. Оба API аналогичны, за исключением того, что метод view выполняет поиск в файле представлений в папке тем: fuel / app / themes / tpthemes / вместо топлива / app / views /.

$theme = \Theme::instance(); 
$view = $theme->view('template/index'); 
// *fuel/app/themes/tpthemes/template/index.php 

ведущий

Метод Presenter использует Presenter :: forge () в фоновом режиме. Оба API похожи, за исключением того, что метод презентатора выполняет поиск в файле представлений в папке тем: fuel / app / themes / tpthemes / вместо топлива / app / views /.

$theme = \Theme::instance(); 
$presenter = $theme->presenter('template/index');

asset_path

Метод asset_path возвращает путь к запрашиваемому ресурсу относительно текущей выбранной темы.

$theme = \Theme::instance();  

// public/assets/tpthemes/css/style.css 
$style = \Html::css($theme->asset_path('css/style.css')); 

add_path

Метод add_path позволяет добавить путь к теме во время выполнения.

$theme = \Theme::instance(); 
$theme->add_path(DOCROOT.'newthemes');

add_paths

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

$theme = \Theme::instance();   
$theme->add_path(DOCROOT.'newthemes'); 

активный

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

$theme = \Theme::instance(); 
$active = $theme->active('newtheme'); 

отступать

метод fallback позволяет установить тему возврата.

$theme = \Theme::instance();
$fallback = $theme->fallback('custom'); 

get_template

Метод get_template вернет экземпляр View текущего загруженного шаблона темы.

$theme = \Theme::instance(); 
$theme->get_template()->set('body', 'Theme can change the look and feel of your app');

set_template

Метод set_template позволяет установить шаблон темы для страницы.

$theme = \Theme::instance(); 
$theme->set_template('layouts/index')->set('body', 'set theme template');

находить

find возвращает true, если путь к теме найден, в противном случае возвращается false.

$theme = \Theme::instance(); 
$path = $theme->find('newtheme')

все

Метод all возвращает массив всех тем во всех путях.

$theme = \Theme::instance(); 
$themes = $theme->all(); 

получить данные

Метод get_info возвращает конкретную переменную из массива информации о теме. Если тема не указана, используется информационный массив активной темы.

$theme = \Theme::instance(); 
$var = $theme->get_info('color', 'green', 'newtheme');

Здесь метод получения цвета определен в «newtheme». Если он не определен, он будет использовать «зеленый» в качестве цвета по умолчанию.

set_info

Метод set_info устанавливает переменную в активной или резервной теме.

$theme->set_info('color', 'green', 'fallback'); 

set_partial

Метод set_partial позволяет установить частичное представление для именованного раздела шаблона вашей страницы. Обычно это делается через вызов HMVC.

$theme = \Theme::instance(); 
$theme->set_template('layouts/homepage'); 
$theme->set_partial('navbar', 'homepage/navbar'); 

get_partial

Метод get_partial позволяет получить экземпляр представления ранее установленного партиала в именованном разделе шаблона вашей страницы.

$theme = \Theme::instance(); 
$theme->set_partial('sidebar', 'partials/menu'); 
$theme->get_partial('sidebar', 'partials/menu')->set('class', 'menu green');

Рабочий пример

Давайте добавим поддержку тем в наше приложение для сотрудников.

Шаг 1 — Добавьте новый файл конфигурации темы, fuel / app / config / theme.php со следующим содержимым.

<?php  
   return array ( 
      'active' => 'tpthemes',
      'fallback' => 'tpthemes', 
      'paths' => array (APPPATH.'themes', ), 
      'assets_folder' => 'assets', 
      'view_ext' => '.html', 
      'require_info_file' => false, 
      'info_file_name' => 'themeinfo.php', 
      'use_modules' => false, 
   );

Шаг 2 — Добавьте новую папку ресурсов, public / assets / tpthemes / css для темы, tpthemes.

cd /go/to/app/root/path 
mkdir -p public/assets/tpthemes/css 

Шаг 3 — Загрузите последнюю версию начальной загрузки и поместите файл bootstrap.min.css в папку public / assets / tpthemes / css.

Шаг 4 — Добавьте новую папку, tpthemes в папку fuel / app / themes.

cd /go/to/app/root/path   
mkdir -p fuel/app/themes/tpthemes 

Шаг 5 — Добавьте новый шаблон макета, bootstrap.html в fuel / app / themes / tpthemes / layout / и добавьте следующий код.

<!DOCTYPE html> 
<html lang = "en"> 
   <head> 
      <title>Theme example</title> 
      <meta charset = "utf-8"> 
      <meta name = "viewport" content = "width = device-width, initial-scale = 1"> 
      <!-- Bootstrap core CSS --> 
      <?php echo \Theme::instance()->asset->css('bootstrap.min.css'); ?> 
   </head> 
   
   <body> 
      <?php echo $header; ?> 
      <div class = "container"> 
         <div class = "row">
            <div class = "col-sm-12"> 
               <?php echo $content; ?> 
            </div> 
         </div> 
      </div> 
   </body>
   
</html> 

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

Шаг 6 — Добавьте новый шаблон заголовка header.php в fuel / app / themes / tpthemes / partials следующим образом.

<div class = "jumbotron text-center">
   <h1>Theme support in fuelphp</h1> 
   <p>bootstrap based template</p>  
</div> 

Шаг 7 — Создайте новый контроллер, ThemeSample в fuel / app / classes / controller / themesample.php и действие в action_index следующим образом.

<?php  
   class Controller_ThemeSample extends \Controller { 
      public function before() { 
         $this->theme = \Theme::instance(); 
         $this->theme->set_template('layouts/bootstrap');  
         $header = $this->theme->view('partials/header'); 
         $this->theme->get_template()->set('header', $header); 
      }  
      public function action_index() { 
         $content = $this->theme 
         ->view('themesample/index') 
         ->set('message', 'This data comes from action page');  
         $this->theme 
         ->get_template() 
         ->set('content', $content); 
      } 
      public function after($response) { 
         if (empty($response) or  ! $response instanceof Response) { 
            $response = \Response::forge(\Theme::instance()->render()); 
         } 
         return parent::after($response); 
      } 
   }

Здесь мы использовали метод до и после, чтобы выполнить инициализацию темы, используя методы класса Theme . Некоторые из используемых методов — это instance, get_template, set_template и view.

Шаг 8 — Наконец, добавьте представление для действия index, index.php в fuel / app / themes / tpthemes / themesample следующим образом.

<p>The data comes from *fuel/app/themes/tpthemes/themesample/index.html* file.</p> 
<p> 
   <?php echo $message; ?> 
</p>

Здесь мы определили одну переменную, message, которую нужно динамически устанавливать в контроллере.

Мы создали новую тему, tpthemes и использовали ее в контроллере ThemeSample . Давайте теперь проверим результат, запросив URL, http: // localhost: 8080 / themesample / index. Результат выглядит следующим образом.

Поддержка тем

FuelPHP — Модули

Модуль — отличный способ написать многократно используемые веб-функции, такие как блог, альбом, чат и т. Д. Модуль не мешает другому коду в веб-приложении. Он живет в своей собственной папке и тихо обеспечивает свою функциональность. Модули — это просто один и тот же контроллер, модели и виды, за исключением того, что они сгруппированы, настроены и помещены в специальную папку. Обычно модуль обычно находится в подкаталоге приложения с именем modules, расположенном в fuel / app / modules.

Конфигурация модуля

Мы можем определить путь к модулям в основном файле конфигурации приложения fuel / app / config / config.php следующим образом.

'module_paths' => array ( 
   path/to.’modules'.DS,              // path to application modules 
   path/to.’..’.DS.'globalmods'.DS    // path to our global modules 
),

Пространство имен модуля

В FuelPHP каждый модуль имеет свое собственное пространство имен PHP. Установка отдельного пространства имен устраняет конфликты имен. Например, модуль сотрудника может быть установлен в пространстве имен EmployeeModule следующим образом.

<?php  
   namespace Employeemodule;  

   class Controller_Employee { 
      //code here 
   }

Модуль должен иметь имя, идентичное имени папки модуля.

Структура модуля

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

Структура модуля выглядит следующим образом —

  • классы
    • контроллер
    • модель
    • Посмотреть
  • конфиг
  • языки
  • задачи
  • Просмотры

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

'always_load => array ( 
   'modules' => array('employeemodule'), 
), 

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

Module::load('employeemodule');  
\Employeemodule\Myclass::mymethod('params');

FuelPHP — Пакеты

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

  • Он не отображается на веб-URL
  • Это не доступно через запросы HMVC

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

Создание пакетов

Чтобы создать пакет, сначала нам нужно расположить наш исходный код следующим образом.

/fuel 
   /packages 
      /package (root directory of package) 
         /bootstrap.php 
      /classes 
         /our.php 
      /classes.php 
         /here.php 
      /config 
         /config.php 
         /and_so_on

Структура пакета имеет два специфичных для пакета файла, файлы config.php и bootstrap.php. Назначение файла конфигурации — сгруппировать конфигурацию пакета в самой папке пакета, не нарушая основное приложение. Цель файла начальной загрузки состоит в том, чтобы установить пространство имен так, чтобы автозагрузчик загружал его правильно.

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

Autoloader::add_namespace('Mypackage', __DIR__.'/classes/'); 
Autoloader::add_core_namespace('Mypackage'); 
Autoloader::add_core_namespace('Mypackage', true); 
Autoloader::add_classes (array( 
   'Mypackage\\Classname' => __DIR__.'/classes/classname.php', 
   'Mypackage\\Anotherclass' => __DIR__.'/classes/anotherclass.php', 
)); 

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

$instance = new Myclass; 
$instance = new Mynamespace\Myclass; 

Установка пакетов

Пакеты обычно помещаются в каталог топлива / пакетов. По умолчанию установлены следующие пакеты:

  • auth — пакет аутентификации

  • электронная почта — электронная почта

  • масло — Топливная команда, масляный пакет

  • orm — пакет ORM

  • parser — пакет анализатора Markdown

auth — пакет аутентификации

электронная почта — электронная почта

масло — Топливная команда, масляный пакет

orm — пакет ORM

parser — пакет анализатора Markdown

Чтобы установить новый пакет, ниже приведены два варианта:

Вариант 1 — Ручная установка — скачать и установить

Чтобы установить пакет вручную, сначала загрузите пакет с сайта автора. Распакуйте его и поместите в папку fuel / packages / .

Вариант 2 — Автоматический метод с использованием команды масла

FuelPHP предоставляет автоматический способ установки пакетов, размещенных на github. Используйте следующую команду для установки пакета mytestpackage.

php oil package install mytestpackage

Он клонирует исходный код пакета с помощью git client и перемещает его в папку fuel / packages. Если git client недоступен, то мы можем использовать аргумент команды –direct, чтобы команда загружала и устанавливала пакеты следующим образом.

php oil package install mytestpackage --direct

Использование пакетов

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

Вариант 1 — через пакет класса

FuelPHP предоставляет класс Package для загрузки, выгрузки и проверки доступности пакетов с помощью методов load, unload и загруженных, соответственно. Метод загрузки имеет два параметра. Первый параметр, $ package, является именем пакета, а второй параметр, path, является путем к пакету. Второй параметр является необязательным, если пакет установлен в папке fuel / packages .

// load the orm package 
Package::load('orm');  

// load the parser package from a specific directory 
Package::load('parser', '/path/to/packages/dir/');  

// load the non-existent package 
Package::load('awesome'); // Throws a PackageNotFoundException

Вариант 2 — через файл конфигурации

Чтобы загрузить пакет навсегда, просто добавьте пакет под записью конфигурации always_load в главном файле конфигурации fuel / app / config / config.php . Чтобы загрузить пакет электронной почты, используйте следующий синтаксис.

'always_load' => array ( 
   'packages' => array ( 
      'email', 
   ), 
), 

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

$instance = new Myclass; 
$instance = new Mynamespace\Myclass;

FuelPHP — управление файлами cookie и сессиями

Cookie обеспечивает хранение данных на стороне клиента и поддерживает только небольшой объем данных. Обычно это 2 КБ на домен, и это зависит от браузера. Сеанс обеспечивает хранение данных на стороне сервера и поддерживает большое количество данных. Давайте рассмотрим, как создать cookie и сеанс в веб-приложении FuelPHP.

Печенье

FuelPHP предоставляет класс Cookie для создания элемента cookie. Класс cookie используется для создания, назначения и удаления файлов cookie.

Настроить Cookie

Класс Cookie можно настроить глобально через основной файл конфигурации приложения, расположенный по адресу fuel / app / config / config.php. Это определяется следующим образом.

'cookie' => array (  
   
   //Number of seconds before the cookie expires 
   'expiration'  => 0,  
   
   //Restrict the path that the cookie is available to 
   'path'        => '/',  
   
   //Restrict the domain that the cookie is available to 
   'domain'      => null,  
   
   // Only transmit cookies over secure connections 
   'secure'      => false,  
   
   // Only transmit cookies over HTTP, disabling Javascript access 
   'http_only'   => false, 
), 

методы

Класс Cookie предоставляет методы для создания, доступа и удаления элемента cookie. Они заключаются в следующем —

задавать()

Метод set используется для создания переменной Cookie. Он содержит следующие аргументы,

  • $ name — ключ в массиве $ _COOKIE.

  • $ value — значение файла cookie.

  • $ expiration — количество секунд, в течение которых cookie должен сохраняться.

  • $ path — путь на сервере, на котором будет доступен файл cookie.

  • $ domain — домен, для которого доступен файл cookie.

  • $ secure — установите в значение true, если вы хотите передавать куки только по защищенным соединениям.

  • $ httponly — разрешить только передачу файлов cookie по HTTP, отключив доступ JavaScript.

$ name — ключ в массиве $ _COOKIE.

$ value — значение файла cookie.

$ expiration — количество секунд, в течение которых cookie должен сохраняться.

$ path — путь на сервере, на котором будет доступен файл cookie.

$ domain — домен, для которого доступен файл cookie.

$ secure — установите в значение true, если вы хотите передавать куки только по защищенным соединениям.

$ httponly — разрешить только передачу файлов cookie по HTTP, отключив доступ JavaScript.

Cookie::set('theme', 'green');

получить()

Метод get используется для чтения переменной Cookie. Он содержит следующие аргументы,

  • $ name — ключ в массиве $ _COOKIE.

  • $ value — Возвращаемое значение, если ключ недоступен в массиве $ _COOKIE.

$ name — ключ в массиве $ _COOKIE.

$ value — Возвращаемое значение, если ключ недоступен в массиве $ _COOKIE.

Cookie::get('theme');

удалять()

Метод delete используется для удаления переменной Cookie. Он содержит следующие аргументы,

  • $ name — ключ в массиве $ _COOKIE.

  • $ value — значение файла cookie.

  • $ domain — домен, для которого доступен файл cookie.

  • $ secure — установите в значение true, если вы хотите передавать куки только по защищенным соединениям.

  • $ httponly — Разрешить только передавать куки-файлы по HTTP, отключив доступ JavaScript.

$ name — ключ в массиве $ _COOKIE.

$ value — значение файла cookie.

$ domain — домен, для которого доступен файл cookie.

$ secure — установите в значение true, если вы хотите передавать куки только по защищенным соединениям.

$ httponly — Разрешить только передавать куки-файлы по HTTP, отключив доступ JavaScript.

Cookie::delete('theme');

сессия

FuelPHP предоставляет класс Session для поддержания состояния приложения.

Настроить сеанс

Класс сеанса может быть настроен через специальный конфигурационный файл fuel / core / config / session.php . Некоторые из важных записей конфигурации следующие:

  • auto_initialize — инициализировать сеанс автоматически.

  • драйвер — имя драйвера сеанса. Сеанс реализован с использованием драйвера, и возможны следующие варианты: cookie, db, memcached, redis и file. Драйвер по умолчанию — cookie.

  • match_ipпроверяет IP клиента.

  • match_ua — проверка клиентского пользовательского агента.

  • expiration_time — Время ожидания сеанса в секундах.

  • вращение_времени — время возобновления сеанса.

auto_initialize — инициализировать сеанс автоматически.

драйвер — имя драйвера сеанса. Сеанс реализован с использованием драйвера, и возможны следующие варианты: cookie, db, memcached, redis и file. Драйвер по умолчанию — cookie.

match_ipпроверяет IP клиента.

match_ua — проверка клиентского пользовательского агента.

expiration_time — Время ожидания сеанса в секундах.

вращение_времени — время возобновления сеанса.

Методы сессии

Класс сеанса предоставляет методы для манипулирования данными сеанса. Они заключаются в следующем,

пример()

Метод экземпляра возвращает экземпляр по умолчанию или конкретный экземпляр, который идентифицируется по имени.

$session = Session::instance();            // default instance 
$session = Session::instance('myseesion'); // specific instance

задавать()

Метод set используется для назначения переменной Session.

Session::set('userid', $userid);

получить()

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

$userid = Session::get('userid'); 

удалять()

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

Session::delete('userid');

Создайте()

Метод create позволяет создать новый сеанс. Если сеанс уже существует, он будет уничтожен и будет создан новый сеанс.

Session::create(); 

уничтожить ()

Метод уничтожения используется для уничтожения существующего сеанса.

Session::destroy();

читать()

Метод чтения позволяет читать сеанс.

Session::read(); 

записывать()

Метод записи позволяет записывать сеанс.

Session::write();

Кнопка ()

Метод key позволяет вам получить элементы ключа сеанса. Значение ключа уникально.

$session_id = Session::key('session_id'); 

FuelPHP — События

Событие — это действие или событие, распознаваемое программой, которое может обрабатываться самой программой. Например, мы можем определить действие или событие с именем my_fuel_event и затем выполнять некоторую работу всякий раз, когда вызывается событие my_fuel_event. FuelPHP предоставляет класс Event для работы с событиями в приложении.

Системные события

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

  • app_created — это событие будет запущено после инициализации среды FuelPHP.

  • request_created — это событие будет вызвано после подделки нового объекта запроса.

  • request_started — это событие будет инициировано при запросе выполнения запроса.

  • controller_started — это событие будет вызвано до вызова метода controllers перед ().

  • controller_finished — это событие будет вызвано после того, как метод контроллера после () был вызван и ответ получен.

  • response_created — это событие будет инициировано после подделки нового объекта Response.

  • request_finished — это событие будет инициировано, когда выполнение запроса будет завершено и ответ получен.

  • shutdown — это событие будет вызвано после того, как основной запрос будет обработан, а выходные данные отправлены.

app_created — это событие будет запущено после инициализации среды FuelPHP.

request_created — это событие будет вызвано после подделки нового объекта запроса.

request_started — это событие будет инициировано при запросе выполнения запроса.

controller_started — это событие будет вызвано до вызова метода controllers перед ().

controller_finished — это событие будет вызвано после того, как метод контроллера после () был вызван и ответ получен.

response_created — это событие будет инициировано после подделки нового объекта Response.

request_finished — это событие будет инициировано, когда выполнение запроса будет завершено и ответ получен.

shutdown — это событие будет вызвано после того, как основной запрос будет обработан, а выходные данные отправлены.

Мы можем обрабатывать события в специальном файле конфигурации fuel / app / config / events.php следующим образом:

<?php  
   return array ( 
      'fuelphp' => array ( 
         'app_created' => function() { 
            // After FuelPHP initialised
         }, 
         'request_created' => function() { 
            // After Request forged 
         }, 
         'request_started' => function() { 
            // Request is requested 
         }, 
         'controller_started' => function() { 
            // Before controllers before() method called 
         }, 
         'controller_finished' => function() { 
            // After controllers after() method called 
         }, 
         'response_created' => function() { 
            // After Response forged 
         }, 
         'request_finished' => function() { 
            // Request is complete and Response received 
         }, 
         'shutdown' => function() { 
            // Output has been send out 
         }, 
      ), 
   );

Методы событий

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

регистр()

Метод register позволяет файлам регистрировать объект, который будет запущен при вызове метода триггера.

$my_event_code = function() { 
   echo 'my event'; 
} 
Event::register('my_event', $my_event_code); 

разрегистрировать ()

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

Event::unregister('my_event', $my_event_code);

спусковой крючок()

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

Event::trigger('my_event');

has_events ()

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

Event::has_events('my_event');

подделать ()

Кузница возвращает новый объект события.

$event = Event::forge();

пример()

Экземпляр возвращает новый объект события singleton.

$event = Event::instance('event_instance');

FuelPHP — Управление электронной почтой

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

конфигурация

Чтобы включить функцию электронной почты в приложении, нам нужно просто загрузить пакет электронной почты, как указано ниже в основном файле конфигурации, fuel / app / config / config.php.

'always_load' => array ( 
   'packages' => array ( 
      'email', 
   ), 
),

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

\Package::load('email');

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

  • драйвердрайвер электронной почты, такой как SMTP

  • is_html — отправлять почту как HTML-контент или нет

  • приоритет — приоритет электронной почты

  • smtp.host — хост SMTP-сервера

  • smtp.port — порт SMTP-сервера

  • smtp.username — имя пользователя SMTP-сервера

  • smtp.password — пароль SMTP-сервера

  • smtp.timeout — время ожидания SMTP

  • smtp.starttlsнужна ли SMTP-серверу команда STARTTLS

драйвердрайвер электронной почты, такой как SMTP

is_html — отправлять почту как HTML-контент или нет

приоритет — приоритет электронной почты

smtp.host — хост SMTP-сервера

smtp.port — порт SMTP-сервера

smtp.username — имя пользователя SMTP-сервера

smtp.password — пароль SMTP-сервера

smtp.timeout — время ожидания SMTP

smtp.starttlsнужна ли SMTP-серверу команда STARTTLS

API электронной почты

Ниже приведены API, предоставляемые классом драйвера электронной почты и драйвера электронной почты.

ковать

Цель: создать экземпляр драйвера электронной почты. Он создает драйвер на основе конфигурации или входных данных, которые он получает. Драйвер электронной почты предоставляет функции для создания и отправки почты. Некоторые из возможных драйверов электронной почты: smtp, sendmail, mailgun и mandrill .

  • Параметр — Нет или массив деталей конфигурации

  • Returns — возвращает объект Email_Driver

Параметр — Нет или массив деталей конфигурации

Returns — возвращает объект Email_Driver

Например,

$email = \Email::forge();  
$email = \Email::forge (array( 
   'driver' => 'smtp', 
));

тело

  • Цель — установить тело сообщения

  • Параметр — $ body — тело сообщения

  • Returns — возвращает текущий экземпляр

Цель — установить тело сообщения

Параметр — $ body — тело сообщения

Returns — возвращает текущий экземпляр

Например,

$email = \Email::forge(); 
$email->body('Body message');  

//or pass it a View 
$email->body(\View::forge('my/view', $data); 

alt_body

  • Цель — установить альтернативное тело сообщения.

  • Параметр — $ alt_body — альтернативное тело сообщения

  • Returns — возвращает текущий экземпляр

Цель — установить альтернативное тело сообщения.

Параметр — $ alt_body — альтернативное тело сообщения

Returns — возвращает текущий экземпляр

Например,

$email = \Email::forge(); 
$email->alt_body('Body message');  

//or pass it a View 
$email->alt_body(\View::forge('my/view', $data);

приоритет

  • Цель — установить приоритет почты

  • Параметр

    • $ priority — значение приоритета. Варианты —

Цель — установить приоритет почты

Параметр

$ priority — значение приоритета. Варианты —

a. \Email::P_LOWEST 
* \Email::P_LOW 
* \Email::P_NORMAL 
* \Email::P_HIGH 
* \Email::P_HIGHEST
  • Returns — возвращает текущий экземпляр

Returns — возвращает текущий экземпляр

Например,

$email = \Email::forge(); 
$email->priority(\Email::P_HIGHEST);

html_body

  • Цель — установить тело сообщения в формате HTML.

  • Параметр

    • $ html — тело сообщения в HTML;

    • generate_altгенерировать ли альтернативное сообщение;

    • auto_attach — вставлять изображение или нет

  • Returns — возвращает текущий экземпляр

Цель — установить тело сообщения в формате HTML.

Параметр

$ html — тело сообщения в HTML;

generate_altгенерировать ли альтернативное сообщение;

auto_attach — вставлять изображение или нет

Returns — возвращает текущий экземпляр

Например,

$email = \Email::forge();  

// Do generate the alt body, but don't auto attach images. 
$email->html_body(\View::forge('welcome/email', $data), true, false); 

от

  • Цель — установить адрес отправителя

  • Параметры

    • $ from — с адреса электронной почты;

    • $ name — имя отправителя

  • Returns — возвращает текущий экземпляр

Цель — установить адрес отправителя

Параметры

$ from — с адреса электронной почты;

$ name — имя отправителя

Returns — возвращает текущий экземпляр

Например,

$email = \Email::forge(); 
$email->from('test@test.com', 'My Name');

предмет

  • Цель — установить тему сообщения

  • Параметр — $ subject — тема сообщения электронной почты.

  • Returns — возвращает текущий экземпляр

Цель — установить тему сообщения

Параметр — $ subject — тема сообщения электронной почты.

Returns — возвращает текущий экземпляр

Например,

$email = \Email::forge(); 
$email->subject('Suject of the mail message');

в

  • Цель — установить адрес электронной почты получателя

  • Параметры

    • $ email — адрес электронной почты или массив адресов электронной почты;

    • $ name — имя получателя

  • Returns — возвращает текущий экземпляр

Цель — установить адрес электронной почты получателя

Параметры

$ email — адрес электронной почты или массив адресов электронной почты;

$ name — имя получателя

Returns — возвращает текущий экземпляр

Например,

$email = \Email::forge();  
$email->to('test@test.com', 'My Dear Name'); 
$email->to (array( 
   'test@test.com', 
   'test@test.com' => 'My Dear friend', 
)); 

заголовок

  • Цель — установить пользовательский заголовок для сообщения электронной почты

  • Параметры

    • $ header — тип заголовка или массив заголовков;

    • $ value — значение заголовка

  • Returns — возвращает текущий экземпляр

Цель — установить пользовательский заголовок для сообщения электронной почты

Параметры

$ header — тип заголовка или массив заголовков;

$ value — значение заголовка

Returns — возвращает текущий экземпляр

Например,

$email = \Email::forge(); 
$email->header('X-SMTPAP', 'XXXXXXXX'); 
$email>reply_to (array( 
   'X-SMTPAP'  => 'XXXXXX', 
   'X-SMTPAP2' > 'XXXXXA',
));

прикреплять

  • Цель — прикрепить файл к сообщению электронной почты

  • Параметры

    • $ file — путь к файлу;

    • $ inline — вложить файл или нет;

    • $ cid — идентификатор контента;

    • $ mime — MIME-тип файла вложения;

    • $ name — переопределение имени файла вложения

  • Returns — возвращает текущий экземпляр

Цель — прикрепить файл к сообщению электронной почты

Параметры

$ file — путь к файлу;

$ inline — вложить файл или нет;

$ cid — идентификатор контента;

$ mime — MIME-тип файла вложения;

$ name — переопределение имени файла вложения

Returns — возвращает текущий экземпляр

Например,

$email = \Email::forge();
$email>attach(DOCROOT.'attachments/sample_attachment.pdf');

Отправить

  • Цель — отправить письмо.

  • Параметр

    • $ validateподтверждать ли адреса электронной почты

  • Возвращает — истина или ложь

Цель — отправить письмо.

Параметр

$ validateподтверждать ли адреса электронной почты

Возвращает — истина или ложь

Например,

$email = \Email::forge(); 
try{ 
   $email->send(); 

} catch(\EmailSendingFailedException $e) { 
   // The driver could not send the mail. 

} catch(\EmailValidationFailedException $e) { 
   // One or more email addresses failed validation. 
}

Рабочий образец электронной почты

Давайте используем API, изученный в предыдущей главе, и создадим простой код для отправки сообщения. Ниже приведен самый простой код для отправки сообщения.

$email = Email::forge(); 
$email->from('someone@gmail.com', 'person1'); 
$email->to('anotherone@gmail.com', 'person2'); 
$email->subject('Add something'); 
$email->body('contents of mail'); $email->send(); 

FuelPHP — Профилировщик

Профилировщик является одним из важных инструментов для анализа и улучшения производительности приложения. FuelPHP предоставляет отличный профилировщик для профилирования приложения. Давайте узнаем о профиле в FuelPHP в этой главе.

Включить профилирование

Профилирование по умолчанию отключено. Чтобы включить профилирование, установите для атрибута профилирования значение true в главном файле конфигурации fuel / app / config / config.php следующим образом.

'profiling'  => true, 

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

Включить профилирование

Информация о профилировщике

Профилировщик имеет интерфейс с вкладками и состоит из следующих данных:

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

  • Время загрузки — показывает время загрузки запроса.

  • База данных — количество выполненных запросов и время выполнения.

  • Память — Общая память, используемая для запроса.

  • Файлы — показывает все файлы PHP.

  • Config — Содержимое конфигурации в конце запроса.

  • Сеанс — содержание сеанса в конце запроса.

  • GET — Содержимое массива $ _GET.

  • POST — содержимое массива $ _POST.

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

Время загрузки — показывает время загрузки запроса.

База данных — количество выполненных запросов и время выполнения.

Память — Общая память, используемая для запроса.

Файлы — показывает все файлы PHP.

Config — Содержимое конфигурации в конце запроса.

Сеанс — содержание сеанса в конце запроса.

GET — Содержимое массива $ _GET.

POST — содержимое массива $ _POST.

Профилировщик Класс

Класс профилировщика используется для добавления вашей информации о профилировании. Он реализует настроенную версию PHPQuickProfiler (PQP). Profiler содержит коллекцию переменных javaScript для управления начальным состоянием Profiler.

Класс Profiler поддерживает следующие методы

отметка()

Метод mark добавит маркер скорости в профилировщик. Показывает время загрузки.

Profiler::mark('my custom code'); 

mark_memory ()

Метод * mark_memory * добавляет маркер памяти в профилировщик. Если вход не указан, использование памяти в этот момент регистрируется. Если мы укажем переменную и метку для переменной, как показано ниже, то она покажет использование памяти переменной и пометит ее с помощью указанной метки.

mark_memory($this, 'My Employee Controller memory usage');

приставка()

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

Profiler::console('log entry'); 

FuelPHP — Обработка ошибок и отладка

FuelPHP обеспечивает отличную поддержку для обработки ошибок и отладки приложения. Давайте разберемся с обработкой и отладкой ошибок в этой главе.

Обработка ошибок

Обработка ошибок FuelPHP основана на исключениях. FuelPHP предоставляет исключение PhpErrorException для всех старых ошибок php. FuelPHP вызывает PhpErrorException при возникновении ошибки в коде PHP. FuelPHP также позволяет легко отображать пользовательские страницы ошибок для различных кодов состояния HTTP.

Ошибка файла не найдена

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

По умолчанию страница по умолчанию настроена для исключения HttpNotFoundException в файле конфигурации маршрутов fuel / app / config / rout.php с использованием 400 записей. Всякий раз, когда возникает HttpNotFoundException, запрос перенаправляется на страницу 400.

'_404_'   => 'welcome/404',    // The main 404 route 

Внутренние ошибки

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

По умолчанию страница по умолчанию настроена для исключения HttpServerErrorException в файле конфигурации маршрутов fuel / app / config / rout.php с использованием 500 записей. Всякий раз, когда возникает HttpServerErrorException, запрос перенаправляется на страницу 500.

'_500_'   => 'welcome/500',    // The main 500 route

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

Нарушения прав доступа

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

По умолчанию страница по умолчанию настроена для исключения HttpNoAccessException в файле конфигурации маршрутов fuel / app / config / rout.php, используя запись 403. Всякий раз, когда HttpNoAccessException повышается, запрос будет перенаправлен на страницу 403.

'_403_'   => 'welcome/403',     // The main 403 route 

Эта страница покажет информацию о нарушении прав доступа.

отладка

Отладка является одним из самых частых действий при разработке приложения. FuelPHP предоставляет простой класс Debug для обработки действий по отладке приложения. Давайте изучим класс Debug и его методы в этой главе.

Класс отладки

Класс Debug предоставляет служебные методы для отображения подробной информации о переменных, объектах, массиве и т. Д. Класс Debug предоставляет следующие методы:

свалка

Метод dump возвращает браузеру несколько смешанных значений в форматированном структурированном виде.

Debug::dump($var1, $var2);

трассировка ()

backtrace показывает подробную информацию о текущем выполнении кода. Он показывает информацию о файле PHP, текущую строку и все предыдущие действия.

Debug::backtrace();

классы ()

Возвращает список всех классов.

Debug::classes(); 

интерфейсы ()

Возвращает список всех классов интерфейса.

Debug::interfaces(); 

включает в себя()

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

Debug::includes();

функции ()

Возвращает список всех функций.

Debug::functions(); 

константы ()

Возвращает список всех констант.

Debug::constants();

расширения ()

Возвращает список всех расширений.

Debug::extensions();

Заголовки ()

Возвращает список всех заголовков HTTP.

Debug::headers(); 

phpini ()

Распечатывает список параметров конфигурации, считанных из файла php.ini.

Debug::phpini(); 

FuelPHP — модульное тестирование

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

PHPUnit

Каркас FuelPHP интегрируется со средой тестирования PHPUnit. Чтобы написать модульный тест для среды FuelPHP, нам нужно настроить PHPUnit. Если PHPUnit не установлен, скачайте и установите его. Мы можем подтвердить наличие PHPUnit в нашей системе с помощью следующей команды.

phpunit --version

Если доступен PHPUnit, вы увидите результат, подобный следующему.

PHPUnit 5.1.3 by Sebastian Bergmann and contributors. 

Создание юнит-тестов

Стандартным местоположением, предоставляемым FuelPHP для написания юнит-теста, является fuel / app / tests. Мы можем написать модульный тест для контроллера, модели, представления и презентаторов в отдельных папках. Давайте напишем модульный тест для проверки объекта Model_Employee.

  • Шаг 1 — Создайте папку модели в папке fuel / app / tests.

  • Шаг 2 — Создайте файл employee.php в папке fuel / app / tests / model /.

  • Шаг 3. Создайте новый тестовый класс Test_Model_Employee, расширив класс TestCase, предоставленный из PHPUnit.

  • Шаг 4 — Напишите метод testInstanceOfEmployee () для активизации создания объекта сотрудника с помощью метода assertInstanceOf (), предоставленного классом PHPCnit TestCase.

Шаг 1 — Создайте папку модели в папке fuel / app / tests.

Шаг 2 — Создайте файл employee.php в папке fuel / app / tests / model /.

Шаг 3. Создайте новый тестовый класс Test_Model_Employee, расширив класс TestCase, предоставленный из PHPUnit.

Шаг 4 — Напишите метод testInstanceOfEmployee () для активизации создания объекта сотрудника с помощью метода assertInstanceOf (), предоставленного классом PHPCnit TestCase.

Ниже приведен полный код —

<?php  
   class Test_Model_Employee extends TestCase { 
      public function testInstanceOfEmployee() { 
         $this->assertInstanceOf(Model_Employee::class, new Model_Employee()); 
      } 
   } 

Создание тестовой группы

FuelPHP предоставляет возможность создать группу тестовых случаев. Создать группу так же просто, как добавить атрибут docblock @group. Давайте включим наш тестовый пример в группу MyTest.

<?php   
   /** 
      * @group MyTest 
   */ 
   class Test_Model_Employee extends TestCase { 
      public function testInstanceOfEmployee() { 
         $this->assertInstanceOf(Model_Employee::class, new Model_Employee()); 
      } 
   }

Выполнить тест

Чтобы запустить весь тест в каталоге, используйте следующую команду.

$ php oil test

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

$ php oil test --group = MyTest

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

Tests Running...This may take a few moments.
PHPUnit 5.1.3 by Sebastian Bergmann and contributors.
                                        1 / 1 (100%).
Time: 123 ms, Memory: 8.00Mb
OK (1 test, 1 assertion)

FuelPHP — полный рабочий пример

В этой главе мы узнаем, как создать полное приложение BookStore на основе MVC в FuelPHP.

Шаг 1 Создайте проект

Создайте новый проект с именем «BookStore» в FuelPHP, используя следующую команду.

oil create bookstore

Шаг 2 Создайте макет

Создайте новый макет для нашего приложения. Создайте файл layout.php в папке fuel / app / views / layout.php. Код выглядит следующим образом:

топливо / приложение / просмотров / layout.php

<!DOCTYPE html> 
<html lang = "en"> 
   <head> 
      <meta charset = "utf-8"> 
      <meta http-equiv = "X-UA-Compatible" content = "IE = edge"> 
      <meta name = "viewport" content = "width = device-width, initial-scale = 1">  
      <title><?php echo $title; ?></title>  
      
      <!-- Bootstrap core CSS --> 
      <link href = "/assets/css/bootstrap.min.css" rel = "stylesheet">  
      <script src = "https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js">
      </script> 
      <script src = "/assets/js/bootstrap.min.js"></script> 
   </head>  
   
   <body> 
      <nav class = "navbar navbar-inverse navbar-fixed-top"> 
         <div class = "container"> 
            <div class = "navbar-header">
               
               <button type = "button" class = "navbar-toggle collapsed" 
                  datatoggle = "collapse" data-target = "#navbar" 
                  aria-expanded = "false" ariacontrols = "navbar"> 
                  <span class=  "sr-only">Toggle navigation</span> 
                  <span class = "icon-bar"></span> 
                  <span class = "icon-bar"></span> 
                  <span class = "icon-bar"></span> 
               </button> 
               <a class = "navbar-brand" href = "#">FuelPHP Sample</a> 
            </div> 
            
            <div id = "navbar" class = "collapse navbar-collapse"> 
               <ul class = "nav navbar-nav"> 
                  <li class = "active"><a href = "/book/index">Home</a></li> 
                  <li><a href = "/book/add">Add book</a></li> 
               </ul> 
            </div><!--/.nav-collapse --> 
         </div> 
      </nav>  
      
      <div class = "container"> 
         <div class = "starter-template" style = "padding: 50px 0 0 0;"> 
            <?php echo $content; ?> 
         </div> 
      
      </div><!-- /.container --> 
   </body>
   
</html>

Здесь мы используем шаблон начальной загрузки. FuelPHP имеет первоклассную поддержку шаблонов начальной загрузки. Мы создали две переменные, заголовок и контент. title используется для указания заголовка текущей страницы, а content — для указания деталей текущей страницы.

Шаг 3 Создайте контроллер

Создайте новый контроллер Controller_Book для отображения, добавления, редактирования и удаления книги. Создайте новый файл fuel / app / classes / controller / book.php и разместите следующий код.

топливо / приложение / классы / контроллер / book.php

<?php  
   class Controller_Book extends Controller_Template {
      public $template = 'layout'; 
      public function action_index() { 
         
         // Create the view object 
         $view = View::forge('book/index');  
         
         // set the template variables 
         $this->template->title = "Book index page"; 
         $this->template->content = $view; 
      } 
   } 

Здесь мы создали контроллер книги, унаследовав шаблон контроллера и установив шаблон по умолчанию как fuel / app / views / layout.php.

Шаг 4 Создайте индексное представление

Создайте папку, закажите книгу в папке views в папке fuel / app / views. Затем создайте файл index.php внутри папки книги и добавьте следующий код:

топливо / приложение / просмотров / index.php

<h3>index page</h3>

На данный момент мы создали базовый контроллер книг.

Шаг 5 Изменить маршрут по умолчанию

Обновите маршрут по умолчанию, чтобы установить домашнюю страницу приложения для контроллера книги. Откройте файл конфигурации маршрутизации по умолчанию, fuel / app / config / rout.php и измените его следующим образом.

топливо / приложение / Config / routes.php

<?php 
   return array ( 
      '_root_'  => 'book/index',  // The default route 
      '_404_'   => 'welcome/404', // The main 404 route 

      'hello(/:name)?' => array('welcome/hello', 'name' => 'hello'), 
   ); 

Теперь, запрашивая URL, http: // localhost: 8080 / вернет страницу индекса контроллера книги следующим образом:

Страница индекса возврата

Шаг 6 Создайте базу данных

Создайте новую базу данных на сервере MySQL, используя следующую команду:

create database tutorialspoint_bookdb 

Затем создайте таблицу внутри базы данных, используя следующую команду:

CREATE TABLE book ( 
   id INT PRIMARY KEY AUTO_INCREMENT, 
   title VARCHAR(80) NOT NULL, 
   author VARCHAR(80) NOT NULL, 
   price DECIMAL(10, 2) NOT NULL 
);

Вставьте образец записи в таблицу, используя следующую инструкцию SQL.

INSERT 
INTO 
   book(title, 
   author, 
   price) 
VALUES( 
   'The C Programming Language', 
   'Dennie Ritchie', 
   25.00 
),( 
   'The C++ Programming Language', 
   'Bjarne Stroustrup', 
   80.00
),( 
   'C Primer Plus (5th Edition)', 
   'Stephen Prata', 
   45.00 
),('Modern PHP', 'Josh Lockhart', 10.00),( 
   'Learning PHP, MySQL & JavaScript, 4th Edition', 
   'Robin Nixon', 
   30.00 
)

Шаг 7 Настройте базу данных

Сконфигурируйте базу данных, используя файл конфигурации базы данных db.php, расположенный в fuel / app / config.

топливо / приложение / Config / db.php

<?php  
   return array ( 
      'development' => array ( 
         'type'           => 'mysqli', 
         'connection'     => array ( 
            'hostname'       => 'localhost', 
            'port'           => '3306', 
            'database'       => 'tutorialspoint_bookdb', 
            'username'       => 'root', 
            'password'       => 'password', 
            'persistent'     => false, 
            'compress'       => false, 
         ), 
         'identifier'     => '`', 
         'table_prefix'   => '', 
         'charset'        => 'utf8', 
         'enable_cache'   => true, 
         'profiling'      => false, 
         'readonly'       => false, 
      ),
      'production' => array ( 
         'type'           => 'mysqli', 
         'connection'     => array ( 
            'hostname'       => 'localhost', 
            'port'           => '3306', 
            'database'       => 'tutorialspoint_bookdb', 
            'username'       => 'root', 
            'password'       => 'password', 
            'persistent'     => false, 
            'compress'       => false, 
         ), 
         'identifier'     => '`', 
         'table_prefix'   => '', 
         'charset'        => 'utf8', 
         'enable_cache'   => true, 
         'profiling'      => false, 
         'readonly'       => false, 
      ), 
   );

Шаг 8 Включите пакет Orm

Обновите основной файл конфигурации, чтобы включить пакет ORM. Он расположен в «fuel / app / config /».

топливо / приложение / Config / config.php

'always_load' => array ( 
   'packages' => array ( 
      'orm' 
   ), 
), 

Шаг 9 Создайте модель

Создайте модель книги в book.php, расположенном по адресу «fuel / app / classes / model». Это определяется следующим образом —

топливо / приложение / классы / модель / book.php

<?php  
   class Model_Book extends Orm\Model { 
      protected static $_connection = 'production'; 
      protected static $_table_name = 'book'; 
      protected static $_primary_key = array('id'); 
      
      protected static $_properties = array ( 
         'id',  
         'title' => array ( 
            'data_type' => 'varchar', 
            'label' => 'Book title', 
            'validation' => array ( 
               'required',  
               'min_length' => array(3),  
               'max_length' => array(80) 
            ), 
            
            'form' => array ( 
               'type' => 'text' 
            ), 
         ),  
         'author' => array ( 
            'data_type' => 'varchar', 
            'label' => 'Book author', 
            'validation' => array ( 
               'required', 
            ), 
            'form' => array ( 
               'type' => 'text' 
            ), 
         ),  
         'price' => array ( 
            'data_type' => 'decimal', 
            'label' => 'Book price', 
            'validation' => array ( 
               'required', 
            ), 
            'form' => array ( 
               'type' => 'text' 
            ), 
         ),  
      );  
      protected static $_observers = array('Orm\\Observer_Validation' => array ( 
         'events' => array('before_save') 
      )); 
   }

Здесь мы указали детали базы данных в качестве свойств модели. У этого есть детали проверки также.

Шаг 10 Показать книги

Обновите действие index в контроллере книг, чтобы отобразить список доступных книг в базе данных.

топливо / приложение / классы / контроллер / book.php

<?php  
   class Controller_Book extends Controller_Template { 
      public $template = 'layout'; 
      public function action_index() { 
         
         // Create the view object 
         $view = View::forge('book/index');  
         
         // fetch the book from database and set it to the view 
         $books = Model_Book::find('all'); 
         $view->set('books', $books);  
         
         // set the template variables
         $this->template->title = "Book index page"; 
         $this->template->content = $view; 
      } 
   }

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

Шаг 11 Обновление представления индекса

Обновите файл представления index.php, расположенный в «fuel / app / views / book». Полный обновленный код выглядит следующим образом:

топливо / приложение / просмотров / книга / index.php

<table class = "table"> 
   <thead> 
      <tr> 
         <th>#</th> 
         <th>Title</th> 
         <th>Author</th> 
         <th>Price</th> 
         <th></th> 
      </tr> 
   </thead> 
   
   <tbody> 
      <?php 
         foreach($books as $book) {  
      ?> 
      
      <tr> 
         <td><?php echo $book['id']; ?></td> 
         <td><?php echo $book['title']; ?></td> 
         <td><?php echo $book['author']; ?></td> 
         <td><?php echo $book['price']; ?></td> 
         <td> 
            <a href = "/book/edit/<?php echo $book['id']; ?>">Edit</a> 
            <a href = "/book/delete/<?php echo $book['id']; ?>">Delete</a> 
         </td>
      </tr> 
      
      <?php 
      } 
      ?> 
   </tbody> 
</table> 
<ul>
</ul> 

Теперь, запрашивая URL, http: // localhost: 8080 / покажет страницу следующим образом —

Индекс

Шаг 12 Создайте действие, чтобы добавить книгу

Создайте функциональность, чтобы добавить новую книгу в книжный магазин. Создайте новое действие action_add в контроллере книги следующим образом:

public function action_add() { 
   
   // create a new fieldset and add book model 
   $fieldset = Fieldset::forge('book')->add_model('Model_Book');  
   
   // get form from fieldset 
   $form = $fieldset->form();  
   
   // add submit button to the form 
   $form->add('Submit', '', array('type' => 'submit', 'value' => 'Submit'));
   
   // build the form  and set the current page as action  
   $formHtml = $fieldset->build(Uri::create('book/add'));  
   $view = View::forge('book/add'); 
   $view->set('form', $formHtml, false);  
   
   if (Input::param() != array()) { 
      try { 
         $book = Model_Book::forge(); 
         $book->title = Input::param('title'); 
         $book->author = Input::param('author'); 
         $book->price = Input::param('price'); 
         $book->save();  
         Response::redirect('book'); 
      } catch (Orm\ValidationFailed $e) { 
         $view->set('errors', $e->getMessage(), false); 
      } 
   }  
   $this->template->title = "Book add page";  
   $this->template->content = $view; } 

Здесь выполняются два следующих процесса:

  • Создание формы книги для добавления книги с использованием методов Fieldset и модели Book.

  • Обработка формы книги, когда пользователь вводит информацию о книге и отправляет обратно форму. Его можно найти, проверив метод Input :: param () для любых переданных данных. Обработка формы включает в себя следующие шаги —

    • Соберите информацию о книге.

    • Проверьте информацию о книге. Мы уже установили валидацию для вызова перед сохранением метода. Если проверка не пройдена, она выдаст исключение Orm \ ValidationFailed.

    • Сохраните информацию о книге в базу данных.

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

Создание формы книги для добавления книги с использованием методов Fieldset и модели Book.

Обработка формы книги, когда пользователь вводит информацию о книге и отправляет обратно форму. Его можно найти, проверив метод Input :: param () для любых переданных данных. Обработка формы включает в себя следующие шаги —

Соберите информацию о книге.

Проверьте информацию о книге. Мы уже установили валидацию для вызова перед сохранением метода. Если проверка не пройдена, она выдаст исключение Orm \ ValidationFailed.

Сохраните информацию о книге в базу данных.

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

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

Шаг 13 Создайте представление для добавления действия книги

Создайте представление для добавления действия книги. Создайте новый файл fuel / app / views / book / add.php и введите следующий код,

<style>  
   #form table { 
      width: 90%; 
   }  
   #form table tr { 
      width: 90% 
   }  
   #form table tr td { 
      width: 50% 
   }  
   #form input[type = text], select { 
      width: 100%; 
      padding: 12px 20px; 
      margin: 8px 0; 
      display: inline-block; 
      border: 1px solid #ccc; 
      border-radius: 4px; 
      box-sizing: border-box; 
   }  
   #form input[type = submit] { 
      width: 100%;
      background-color: #3c3c3c; 
      color: white; 
      padding: 14px 20px; 
      margin: 8px 0; 
      border: none; 
      border-radius: 4px; 
      cursor: pointer; 
   }  
   #form div { 
      border-radius: 5px; 
      background-color: #f2f2f2; 
      padding: 20px; 
   }  
</style>  

<div id = "form">  
   <h2>Book form</h2> 
   
   <?php   
      if(isset($errors)) { 
         echo $errors; 
      } 
      echo $form;  
   ?> 
</div> 

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

Шаг 14 Проверка действия добавления книги

При запросе URL-адреса http: // localhost: 8080 / book / add или при нажатии на навигационную ссылку «Добавить книгу» отобразится следующая форма:

форма

Обновленный вид

Форма с данными

Форма с данными

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

Список книг с недавно добавленной книгой

Список книг

Шаг 15 Создание действия для редактирования книги

Создайте функциональность для редактирования и обновления информации существующей книги. Создайте новое действие action_edit в контроллере книги следующим образом.

public function action_edit($id = false) { 
   if(!($book = Model_Book::find($id))) { 
      throw new HttpNotFoundException(); 
   }  
   
   // create a new fieldset and add book model 
   $fieldset = Fieldset::forge('book')->add_model('Model_Book'); 
   $fieldset->populate($book);  
   
   // get form from fieldset 
   $form = $fieldset->form();  
   
   // add submit button to the form
   $form->add('Submit', '', array('type' => 'submit', 'value' => 'Submit'));  
   
   // build the form  and set the current page as action  
   $formHtml = $fieldset->build(Uri::create('book/edit/' . $id));  
   $view = View::forge('book/add'); 
   $view->set('form', $formHtml, false);  
   
   if (Input::param() != array()) { 
      try { 
         $book->title = Input::param('title'); 
         $book->author = Input::param('author'); 
         $book->price = Input::param('price'); 
         $book->save(); 
         Response::redirect('book'); 
      } catch (Orm\ValidationFailed $e) { 
         $view->set('errors', $e->getMessage(), false); 
      } 
   }  
   $this->template->title = "Book edit page"; 
   $this->template->content = $view; 
}

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

Шаг 16 Создайте представление для действия редактирования.

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

Шаг 17 Проверка действия редактирования книги.

Нажмите на ссылку редактирования любой книги на странице со списком книг, она отобразит соответствующую форму книги следующим образом:

Форма с деталями книги

Детали книги формы

Шаг 18 Создайте действие для удаления книги

Создать функционал для удаления книги из книжного магазина. Создайте новое действие action_delete в контроллере книги следующим образом:

public function action_delete($id = null) { 
   if ( ! ($book = Model_Book::find($id))) { 
      throw new HttpNotFoundException(); 

   } else { 
      $book->delete(); 
   } 
   Response::redirect('book'); 
} 

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

Шаг 19 Проверка действия удаления

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

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

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