Посібник PHP MVC Framework
⚡ Розумний підсумок
Проектування PHP MVC Framework відокремлює дані застосунку та бізнес-логіку від представлення, використовуючи моделі, представлення та контролери. CodeIgniter робить цей шаблон практичним, дозволяючи розробникам PHP швидше створювати безпечні та зручні веб-додатки.
Що таке фреймворк PHP MVC?
PHP MVC — це шаблон розробки програми, який відокремлює дані програми та бізнес-логіку (модель) від презентації (перегляду). MVC означає Model, View & Controller.
Контролер є посередником між моделями та представленнями.
Уявіть шаблон проектування 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 framework, є:
|
PHP MVC Framework проти звичайного PHP: ключові відмінності
Що фреймворк насправді змінює на практиці? Звичайний PHP надає вам повну свободу, але кожен проект зрештою переосмислює маршрутизацію, валідацію та доступ до бази даних з нуля. Фреймворк PHP MVC стандартизує ці повторювані завдання, тому ваш код залишається узгодженим у різних проектах та командах.
| Аспект | Звичайний PHP | PHP MVC Framework |
|---|---|---|
| Code організація | Змішані HTML, SQL та логіка в окремих файлах | Розділено на моделі, представлення та контролери |
| Доступ до бази даних | Рукописні запити на кожній сторінці | Вбудований конструктор запитів або ORM з прив'язкою параметрів |
| Безпека | Розробник повинен пам'ятати про всі запобіжні заходи | Включено фільтрацію вхідних даних, захист XSS та CSRF |
| технічне обслуговування | Зміни непередбачувано поширюються по файлах | Кожен шар може змінюватися незалежно |
💡 Порада: Спочатку створіть один невеликий простий PHP-проект, як у опитуванні нижче; проблеми зі змішаним кодом роблять цінність розділення MVC очевидною.
Перенесення програми для опитування громадської думки на CodeЗапалювач
В цьому підручник, ми створили PHP-застосунок для опитувань. Тут ми перенесемо цей код на CodeЗапалювач
- Завантажити останню версію CodeЗапальник від їхнього .
- ExtracПеремістіть вміст архівованого файлу до каталогу розробки в каталозі вашого веб-сервера. У цьому уроці ми використовуватимемо ciopinionpoll як назву папки.
- Перейдіть до URL http://localhost/ciopinionpoll/
Команда CodeСторінка привітання Igniter вище підтверджує правильність встановлення фреймворку. Тепер ми збираємося портувати наш застосунок для опитування громадської думки на CodeЗапальник. Нагадаємо, що наша програма була розділена на три основні компоненти, а саме:
- Фронтальний контролер – це частина, яка реагує на 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);
}
}
?>
ТУТ,
- «class Opinion_poll_model extends CI_Model…» — це наша модель, яка розширює CI_Model
- «parent::__construct();» викликає конструктор CI_Model
- “$this->load->database();” завантажує бібліотеку бази даних, щоб наша програма могла взаємодіяти з базою даних
- «$this->db->» це CodeАктивний запис Запалювача. Перевірте це за посиланням для отримання додаткової інформації про активний запис.
Створення нашого контролера
Давайте тепер створимо контролер. Ми використовуватимемо значення за замовчуванням CodeКонтролер запалювання, розташований у файлі 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 (!defined('BASEPATH')) exit('Прямий доступ до сценарію не дозволено');” гарантує, що користувачі не отримують прямий доступ до класу контролера
- “class Welcome extends 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. Натисніть кнопку «ОК», не вибираючи жодного варіанта, і ви побачите таке сповіщення.
Проголосуйте за свою улюблену бібліотеку, а потім натисніть кнопку «ОК». Ви побачите наступну сторінку з результатами
Це підтверджує спільну роботу трьох шарів: контролер отримав голос, модель зберегла та підрахувала його, а представлення відобразило підсумки.









