Учебное пособие по PHP MVC Framework
⚡ Умное резюме
В основе PHP MVC-фреймворка лежит разделение данных приложения и бизнес-логики от представления с помощью моделей, представлений и контроллеров. CodeIgniter делает этот шаблон практичным, позволяя PHP-разработчикам быстрее создавать безопасные и поддерживаемые веб-приложения.
Что такое PHP-фреймворк MVC?
PHP MVC — это шаблон проектирования приложений, который отделяет данные приложения и бизнес-логику (модель) от представления (представления). MVC означает модель, представление и контроллер.
Контроллер является посредником между моделями и представлениями.
Думайте о шаблоне проектирования MVC как об автомобиле и водителе.
Автомобиль оснащен лобовым стеклом (обзор), которое водитель (контроллер) использует для наблюдения за движением впереди, а затем ускоряется или тормозит (модель) в зависимости от того, что он видит впереди.
Далее давайте посмотрим, почему стоит использовать фреймворк, построенный на этом шаблоне.
Зачем использовать PHP MVC Framework?
PHP MVC-фреймворки упрощают работу со сложными технологиями благодаря:
- Скрытие всех сложных деталей реализации
- Предоставление стандартных методов, которые мы можем использовать для создания наших приложений.
- Повышение производительности разработчиков, поскольку базовые реализации таких операций, как подключение к базе данных и очистка пользовательского ввода, уже частично выполнены.
- Поощрение соблюдения профессиональных стандартов кодирования.
Шаблон проектирования PHP MVC
Давайте теперь кратко обсудим каждый компонент шаблона проектирования MVC.
Модель – эта часть связана с бизнес-логикой и данными приложения. Его можно использовать для проверки данных, обработки данных и их хранения. Данные могут быть получены из;
- плоский файл
- база данных
- XML-документ
- Другие действительные источники данных.
Контроллер – это часть, которая обрабатывает запросы пользователя к ресурсам с сервера.
Например, когда пользователь запрашивает URL …/index.php?products=listКонтроллер загрузит модель товаров, чтобы получить данные о товарах, а затем выведет результаты в виде списка.
Короче говоря, контроллер связывает модели и представления вместе в зависимости от запрошенных ресурсов.
Виды – Эта часть отвечает за представление данных пользователю. Обычно это происходит в виде HTML-страниц.
Типы фреймворка PHP MVC
Выбор лучшего PHP-фреймворка — непростая задача.
Вам не нужно писать собственную структуру, чтобы воспользоваться преимуществами MVC.
Вам следует только попытаться создать свой собственный дизайн приложения, связанного с MVC, чтобы понять, как работают платформы MVC.
Как только вы освоитесь с тем, как работают платформы MVC, вам следует перейти к зрелым и уже протестированным платформам.
В таблице ниже кратко описаны некоторые популярные PHP-фреймворки и функции, которые предлагает каждый из них.
| Рамки | Описание |
|---|---|
|
|
Это один из самых популярных PHP MVC-фреймворков, который сейчас находится в четвертой основной версии.CodeIgniter 4). Он легковесный и прост в освоении. Имеет богатый набор библиотек, которые помогают быстро создавать веб-сайты и приложения. Его могут использовать даже пользователи с ограниченными знаниями объектно-ориентированного программирования. Приложения, созданные с его помощью... CodeВ состав воспламенителя входят:
|
|
Это безопасный и легковесный фреймворк, использующий иерархическую модель «модель-представление-контроллер» (HMVC). Примечание: Разработка Kohana была официально прекращена в 2017 году; её последний стабильный релиз — 3.3.6 (июль 2016 года). Форк сообщества Koseven продолжил развитие её кодовой базы. Среди компаний, использовавших Kohana, можно назвать следующие: |
|
Он создан по образцу Ruby on Rails и активно поддерживается (версия 5.x). Он известен такими концепциями, как шаблоны проектирования программного обеспечения, принцип «соглашение вместо конфигурации», ActiveRecord и т. д. CakePHP работающие приложения включают в себя; |
|
|
Это мощная структура;
Идеально подходит для разработкиping бизнес-приложения. В 2020 году Zend Framework перешёл на открытый исходный код проекта Laminas. Приложения, работающие на основе Zend/Laminas, включают в себя:
К числу компаний, использующих фреймворк Zend, относятся:
|
PHP MVC-фреймворк против обычного PHP: ключевые различия
Что на практике меняет фреймворк? Обычный PHP дает полную свободу, но в каждом проекте приходится заново изобретать маршрутизацию, валидацию и доступ к базе данных. PHP MVC-фреймворк стандартизирует эти повторяющиеся задачи, поэтому ваш код остается согласованным между проектами и командами.
| Аспект | Простой PHP | PHP MVC-фреймворк |
|---|---|---|
| Code организация | HTML, SQL и логика объединены в одном файле. | Разделено на модели, представления и контроллеры. |
| Доступ к базе данных | На каждой странице — рукописные вопросы. | Встроенный построитель запросов или ORM с привязкой параметров. |
| Безопасность. | Разработчик должен помнить обо всех мерах предосторожности. | Включает фильтрацию входных данных, защиту от XSS и CSRF. |
| Обслуживание | Изменения непредсказуемо распространяются по файлам. | Каждый слой может изменяться независимо. |
Примечание: Наконечник: Сначала создайте небольшой простой PHP-проект, например, такой, как в приведенном ниже опросе общественного мнения; трудности, связанные со смешанным кодом, наглядно демонстрируют ценность разделения архитектурных схем (MVC).
Перенос приложения для проведения опросов общественного мнения на Codeвоспламенитель
В этом учебникМы создали PHP-приложение для проведения опросов. Здесь мы перенесем этот код на другой язык программирования. Codeвоспламенитель
- Скачать последняя версия CodeЗажигалка от их
- ExtracСкопируйте содержимое заархивированного файла в каталог разработки вашего веб-сервера. В этом уроке мы будем использовать имя папки ciopinionpoll.
- Перейдите к URL http://localhost/ciopinionpoll/
CodeПриведенная выше приветственная страница Ginniter подтверждает правильную установку фреймворка. Теперь мы собираемся перенести наше приложение для проведения опросов общественного мнения на... CodeIgniter. Напомним, что наше приложение было разделено на три основных компонента, а именно:
- Фронтальный контроллер — это часть, которая реагирует на URL Этот код отправляет запрос и возвращает запрошенную страницу. Он будет размещен в контроллере.
- Модель — это код, который обрабатывает запросы данных и возвращает запрошенные данные. Этот код будет размещен в модели.
- Представления – это код, отвечающий за форматирование и отображение данных. Этот код войдет в представление
Параметры конфигурации базы данных
Для настройки подключения к базе данных:
- Перейдите в папку ciopinionpoll
- Откройте приложение база данных.php файл находится в каталоге application/config.
- Найдите следующие строки кода
- Установите имя пользователя root
- Установите пароль, равный паролю root вашего локального хоста.
- Задайте имя базы данных как opinion_poll. Обратите внимание, что мы будем использовать базу данных, созданную в предыдущем уроке.
- Сохраните изменения и закройте файл.
Создание нашей модели
Далее мы создадим нашу модель, которая будет расширять CI_Model. CI_Model является частью CodeБиблиотеки Igniter. Модель будет находиться в папке application/models. Opinion_poll_model.php
<?php
class Opinion_poll_model extends CI_Model
{
public function __construct()
{
parent::__construct();
$this->load->database();
}
public function total_votes()
{
$query = $this->db->select('COUNT(choice) as choices_count')->get('js_libraries');
return $query->row()->choices_count;
}
public function get_results()
{
$libraries = array("", "JQuery", "MooTools", "YUI Library", "Glow");
$table_rows = '';
for ($i = 1; $i < 5; $i++)
{
$query = $this->db->select('COUNT(choice) as choices_count')
->where('choice', $i)
->get('js_libraries');
$table_rows .= "<tr><td>" . $libraries[$i] . " Got:</td><td><b>" . $query->row()->choices_count . "</b> votes</td></tr>";
}
return $table_rows;
}
public function add_vote($choice)
{
$ts = date("Y-m-d H:i:s");
$data = array('choice' => $choice, 'ts' => $ts);
$this->db->insert('js_libraries', $data);
}
}
?>
ВОТ,
- «Класс Opinion_poll_model расширяет CI_Model…» — это наша модель, расширяющая CI_Model.
- Функция “parent::__construct();” вызывает конструктор CI_Model.
- «$this->load->database();» загружает библиотеку базы данных, чтобы наше приложение могло взаимодействовать с базой данных
- “$this->db->” — это CodeСписок активных пользователей Igniter. Проверьте это. ссылка. для получения дополнительной информации об активной записи.
Создание нашего контроллера
Теперь давайте создадим контроллер. Мы будем использовать контроллер по умолчанию. CodeКонтроллер Igniter находится в файле application/controllers/welcome.php. Замените его исходный код следующим кодом.
<?php
if (!defined('BASEPATH')) exit('No direct script access allowed');
class Welcome extends CI_Controller {
public function __construct() {
parent::__construct();
$this->load->model('opinion_poll_model');
}
public function index() {
if ($this->input->post('submitbutton') && !$this->input->post('vote')) {
echo "<script>alert('You did not vote!');</script>";
}
if ($this->input->post('vote')) {
$this->opinion_poll_model->add_vote($this->input->post('vote'));
$data['total_votes'] = $this->opinion_poll_model->total_votes();
$data['rows'] = $this->opinion_poll_model->get_results();
$this->load->view('results', $data);
} else {
$this->load->view('opinion_poll_form');
}
}
}
/* End of file welcome.php */
/* Location: ./application/controllers/welcome.php */
?>
ВОТ,
- «if (!define('BASEPATH')) exit('Прямой доступ к скрипту не разрешен');» гарантирует, что пользователи не получат прямого доступа к классу контроллера
- «класс Welcome расширяет CI_Controller…» наш контроллер расширяет класс CI_Controller
- Функция «public function __construct()» вызывает метод конструктора класса CI_Controller и загружает нашу модель Opinion_poll_model.
- Функция «public function index()…» соответствует файлу index.php. Она использует CodeКласс ввода Igniter проверяет, был ли отправлен голос, добавляет его в базу данных, а затем отображает результаты. Если массив post в классе ввода пуст, загружается страница голосования.
- “$this->input->post('…')” — это CodeКласс ввода Igniter, который извлекает содержимое глобальной переменной $_POST.
- «$this->opinion_poll_model->add_vote($this->input->post('vote'))» вызывает метод модели add_vote для добавления голосования в базу данных.
Создание наших представлений
Напомним из предыдущего примера, что у нас было две HTML-страницы: одна для голосования, другая для результатов. Мы будем использовать тот же HTML-код с минимальными изменениями для создания наших представлений. Создайте следующие файлы в каталоге application/views.
opinion_poll_form.php
<html>
<head>
<title>
JavaScript Libraries - Opinion Poll
</title>
</head>
<body>
<h2>JavaScript Libraries - Opinion Poll</h2>
<p><b>What is your favorite JavaScript Library?</b></p>
<form method="POST" action="index.php">
<p>
<input type="radio" name="vote" value="1" /> JQuery
<br />
<input type="radio" name="vote" value="2" /> MooTools
<br />
<input type="radio" name="vote" value="3" /> YUI Library
<br />
<input type="radio" name="vote" value="4" /> Glow </p>
<p>
<input type="submit" name="submitbutton" value="OK" />
</p>
</form>
</body>
</html>
Давайте теперь создадим страницу результатов results.php.
<html>
<head>
<title>JavaScript Libraries - Opinion Poll Results</title>
</head>
<body>
<h2>JavaScript Libraries - Opinion Poll Results</h2>
<p><b>What is your favorite JavaScript Library?</b></p>
<p><b><?php echo $total_votes; ?></b> people have thus far taken part in this poll:</p>
<p><table><tr><td>
<?php print($rows); ?>
</tr></td></table></p>
<p><a href="#">Return to voting page</a></p>
</body>
</html>
Тестирование нашего приложения
Предположим, что корневой каталог вашего приложения — ciopinionpoll. Перейдите по указанному пути. http://localhost/ciopinionpoll/
Страница голосования, показанная выше, создана на основе нашего представления opinion_poll_form. Нажмите OK, не выбирая ни одного варианта ответа, и вы увидите следующее предупреждающее сообщение.
Проголосуйте за свою любимую библиотеку, затем нажмите «ОК». Вы увидите страницу с результатами.
Это подтверждает, что три слоя работают вместе: контроллер получил голос, модель сохранила и подсчитала его, а представление отобразило итоговые результаты.









