Посібник PHP MVC Framework

⚡ Розумний підсумок

Проектування PHP MVC Framework відокремлює дані застосунку та бізнес-логіку від представлення, використовуючи моделі, представлення та контролери. CodeIgniter робить цей шаблон практичним, дозволяючи розробникам PHP швидше створювати безпечні та зручні веб-додатки.

  • 🧩 шаблон: MVC розділяє застосунок на Модель (дані), Вид (презентація) та Контролер (обробка запитів) для чистішого коду.
  • ???? Продуктивність: Фреймворки постачають попередньо створені бібліотеки для доступу до бази даних, перевірки та очищення вхідних даних, тому команди швидше впроваджують функції.
  • 🛠️ варіанти: CodeIgniter, CakePHP та Laminas (раніше Zend) залишаються активними варіантами, тоді як Kohana було припинено у 2017 році.
  • 🗄️ Model: In CodeМоделі Igniter розширюють CI_Model та використовують методи Query Builder для безпечної роботи з базою даних.
  • 🎮 Контролер: Контролери розширюють CI_Controller, зчитують введені користувачем дані через клас введення та завантажують правильне представлення.
  • 📈 Вплив: Портування простого PHP-застосунку для опитування показує, як MVC-структура зменшує дублювання та спрощує довгострокове обслуговування.

PHP MVC Framework

Що таке фреймворк 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-фреймворки та функції, які пропонує кожен з них.

Рамки Опис

CodeЗапалювач


CodeЗапалювач


https://codeigniter.com/

Це один з найпопулярніших фреймворків PHP MVC, який зараз випускається у своїй четвертій основній версії (CodeIgniter 4). Він легкий і має коротку криву навчання. Він має багатий набір бібліотек, які допомагають швидко створювати веб-сайти та додатки. Користувачі з обмеженими знаннями ООП-програмування також можуть ним користуватися. Додатки, створені за допомогою CodeЗапальник включає;


Кохана


Кохана


http://kohanaframework.org

Це безпечний та легкий фреймворк на основі ієрархічного контролера представлення моделі (HMVC). Примітка: Kohana офіційно припинила свою роботу у 2017 році; її останній стабільний реліз був 3.3.6 (липень 2016 року). Спільнота Koseven продовжила роботу над кодовою базою. Серед компаній, які використовували Kohana, є:


CakePHP


CakePHP


www.cakephp.org

Він змодельований за зразком Ruby on Rails та активно підтримується (версія 5.x). Він відомий такими концепціями, як шаблони проектування програмного забезпечення, перевага конвенцій над конфігурацією, ActiveRecord тощо. CakePHP потужні програми включають;


Зенд

https://getlaminas.org/


Зенд (тепер Ламінас)

Це потужна структура, яка є;

  • Безпечний, надійний, швидкий і масштабований
  • Підтримує створення веб-сервісів та API.

Це ідеально для розвиткуping бізнес-додатки. У 2020 році Zend Framework перейшов на проект Laminas з відкритим кодом. Додатки на базі Zend/Laminas включають:

  • Pimcore CMS,
  • DotKernel.

Серед компаній, які використовували Zend framework, є:

  • BBC
  • Cisco
  • Вебекс
  • Пропозиції.com

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 відображається після extracвстановлення рамки

Команда CodeСторінка привітання Igniter вище підтверджує правильність встановлення фреймворку. Тепер ми збираємося портувати наш застосунок для опитування громадської думки на CodeЗапальник. Нагадаємо, що наша програма була розділена на три основні компоненти, а саме:

  • Фронтальний контролер – це частина, яка реагує на URL запитує та повертає запитувану сторінку. Цей код буде передано в контролер
  • Модель – це код, який відповідає на запити даних і повертає запитувані дані. Цей код буде введено в модель.
  • Представлення – це код, який відповідає за форматування та відображення даних. Цей код потрапить у вікно перегляду

Параметри конфігурації бази даних

Щоб налаштувати підключення до бази даних:

  • Перейдіть до папки ciopinionpoll
  • Відкрийте база даних.php файл, розташований у каталозі application/config.
  • Знайдіть наступні рядки коду

Параметри конфігурації бази даних у CodeФайл бази даних Igniter.php

  • Встановіть ім'я користувача 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/

Форма для голосування в опитуванні, надана CodeЗастосування запалювача

Сторінка голосування вище взята з нашого перегляду opinion_poll_form. Натисніть кнопку «ОК», не вибираючи жодного варіанта, і ви побачите таке сповіщення.

Повідомлення про перевірку відображається, коли не вибрано жодного голосу

Проголосуйте за свою улюблену бібліотеку, а потім натисніть кнопку «ОК». Ви побачите наступну сторінку з результатами

Сторінка з результатами опитування громадської думки з кількістю голосів за JavaБібліотека скриптів

Це підтверджує спільну роботу трьох шарів: контролер отримав голос, модель зберегла та підрахувала його, а представлення відобразило підсумки.

Поширені запитання

HMVC (Ієрархічний контролер представлення моделі) організовує застосунок у незалежні тріади MVC, які можуть викликати одна одну. Такі фреймворки, як Кохана популяризував HMVC, оскільки він допомагає модуляризувати великі програми.

Так. Laravel наразі є найпопулярнішим PHP MVC-фреймворком. Він дотримується того ж розділення Модель-Вигляд-Контролер, описаного тут, додаючи такі інструменти, як шаблони Eloquent ORM та Blade.

так Такі інструменти, як Копілот GitHub може створювати каркаси моделей, контролерів та представлень із запитів. Вам все одно слід перевірити згенерований код на наявність проблем безпеки, таких як неекранований вивід та SQL-ін'єкції.

Ні. Помічники ШІ пришвидшують написання коду, але фреймворки все ще забезпечують перевірену структуру, параметри безпеки за замовчуванням та конвенції, які забезпечують підтримку додатків. Ці два елементи найкраще працюють разом.

Ні. CodeЗапалювач зручний для розробників з обмеженим досвідом об'єктно-орієнтованого програмування. Знання класів, методів та базового успадкування достатньо для того, щоб слідувати шаблонам його моделі та контролера.

Підсумуйте цей пост за допомогою: