Посібник PHP MVC Framework: приклад CodeIgniter
Що таке фреймворк PHP MVC?
PHP MVC — це шаблон розробки програми, який відокремлює дані програми та бізнес-логіку (модель) від презентації (перегляду). MVC означає Model, View & Controller.
Контролер є посередником між моделями та представленнями.
Уявіть шаблон проектування MVC як автомобіль і водія.
Автомобіль має лобове скло (вид), яке водій (контролер) використовує, щоб контролювати рух попереду, а потім швидкість або гальмування (модель) залежно від того, що він бачить попереду.
Навіщо використовувати PHP MVC Framework?
- PHP MVC Frameworks спрощують роботу зі складними технологіями:
- Приховування всіх складних деталей реалізації
- Надання стандартних методів, які ми можемо використовувати для створення наших програм.
- Підвищення продуктивності розробника, це тому, що базова реалізація таких дій, як підключення до бази даних, очищення введених користувачем даних тощо, уже частково реалізовано.
- Дотримання професійних стандартів кодування
Шаблон дизайну PHP MVC
Давайте тепер коротко обговоримо кожен компонент шаблону проектування MVC.
Модель – ця частина стосується бізнес-логіки та даних програми. Його можна використовувати для перевірки даних, обробки даних і їх зберігання. Дані можуть надходити з;
- плоский файл
- база даних
- XML документ
- Інші дійсні джерела даних.
контролер – це частина, яка займається запитами користувачів на ресурси від сервера.
Наприклад, коли користувачі запитують URL-адресу …/index.php?products=list, контролер завантажить модель продуктів, щоб отримати дані про продукти, а потім виведе результати у вигляді списку.
У двох словах, контролер пов’язує моделі та представлення разом залежно від запитуваних ресурсів.
думки – ця частина стосується представлення даних користувачеві. Зазвичай це у формі HTML-сторінок.
Типи фреймворку PHP MVC
Вибір найкращого PHP-фреймворку є складним завданням.
Вам не обов’язково писати власну структуру, щоб скористатися перевагами MVC.
Ви повинні лише спробувати створити власну програму, пов’язану з MVC, щоб зрозуміти, як працюють інфраструктури MVC.
Коли ви навчитеся працювати з фреймворками MVC, перейдіть до зрілих і вже перевірених фреймворків.
У таблиці нижче коротко описано деякі з популярних фреймворків php і функції, які пропонує кожен фреймворк.
Рамки | Опис |
---|---|
|
Це один із найпопулярніших фреймворків PHP MVC. Він легкий і має короткий період навчання. Він має багатий набір бібліотек, які допомагають швидко створювати веб-сайти та програми. Користувачі з обмеженими знаннями ООП-програмування також можуть використовувати його. Програми на основі CodeIgniter включають; |
|
Це безпечна та легка структура ієрархічного контролера представлення моделі HMVC. Він має багатий набір компонентів для швидкої розробки програм. Компанії, які використовують Kohana, включають: |
|
Він створений за моделлю Ruby on rails. Він відомий такими концепціями, як шаблони проектування програмного забезпечення, конвенція над конфігурацією, ActiveRecord тощо. CakePHP потужні програми включають; |
|
Це потужна структура, яка є;
Він містить API від таких постачальників, як AmazonGoogle Flickr, Yahoo тощо. Він ідеально підходить для розробки бізнес-додатків. Програми на основі Zend включають;
Компанії, які використовують фреймворк Zend, включають:
|
Перенесення програми опитування громадської думки на CodeIgniter
В цьому підручник, ми створили програму опитування PHP. Тут ми перенесемо цей код на CodeIgniter
- Завантажити остання версія CodeIgniter від їх .
- Розпакуйте вміст заархівованого файлу в каталог розробки в каталозі веб-сервера. У цьому уроці ми будемо використовувати ciopinionpoll як назву папки.
- Перейдіть до URL-адреси http://localhost/ciopinionpoll/
Зараз ми збираємося перенести наш додаток для опитування громадської думки на CodeIgniter. Згадайте, що наша програма була розділена на три основні компоненти, а саме:
- Передній контролер – це частина, яка відповідає на запити URL і повертає запитану сторінку. Цей код надходитиме в контролер
- Модель – це код, який відповідає на запит даних і повертає запитувані дані. Цей код увійде в модель
-
Представлення – це код, який відповідає за форматування та відображення даних. Цей код потрапить у вікно перегляду
- Перейдіть до папки ciopinionpoll
- Відкрийте база даних.php файл, розташований у каталозі програми/конфігурації.
- Знайдіть наступні рядки коду
Параметри конфігурації бази даних
- Встановіть ім'я користувача root
- Встановіть пароль користувача локального хосту
- Назва бази даних для opinion_poll. Зверніть увагу, що ми будемо використовувати базу даних, створену на попередньому уроці.
- Збережіть зміни та закрийте файл.
Створення нашої моделі
Далі ми збираємося створити нашу модель, яка розширить CI_Model. CI_Model є частиною бібліотек CodeIgniter. Модель буде розташовано в додатку/моделях opinion_poll_model.php
<?php class Opinion_poll_model extends CI_Model { public function __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++) { $sql_stmt = "SELECT COUNT(choice) choices_count FROM js_libraries WHERE choice = $i;"; $result = $model-> select($sql_stmt); $table_rows .= "<tr><td>" . $ libraries [$i] . " Got:</td><td><b>" . $result[0] . "</b> votes</td></tr>"; } 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->” є активним записом CodeIgniter. Перевір це за посиланням для отримання додаткової інформації про активний запис.
Створення нашого контролера Давайте тепер створимо контролер. Ми будемо використовувати контролер CodeIgniter за замовчуванням, розташований у 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. він використовує вхідний клас CodeIgniter, щоб перевірити, чи подано голосування, додати його до бази даних і відобразити результати. Якщо масив публікацій вхідного класу порожній, завантажується сторінка голосування.
- “$this->input->post('…')” — це вхідний клас CodeIgniter, який захоплює вміст глобальної змінної $_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>
Тестуємо наш додаток
Якщо припустити, що кореневим каталогом вашої програми є ciopinion, перейдіть до http://localhost/ciopionpoll/
Натисніть кнопку OK, ви побачите наступне попередження
Проголосуйте за улюбленого кандидата, а потім натисніть OK. Ви побачите наступну сторінку результатів
Висновок
CodeIgniter — це проста у вивченні та використанні структура PHP MVC, яка може значно скоротити час, витрачений на розробку програм.
CodeIgniter — це проста у вивченні та використанні структура PHP MVC, яка може значно скоротити час, витрачений на розробку програм.
Підсумки
- Фреймворк - це набір бібліотек, які забезпечують часткову реалізацію загальних завдань.
- У PHP є кілька зрілих і перевірених фреймворків MVC з відкритим кодом.
- Хороший підхід до розробки відокремлює дані від презентації та заохочує використання єдиної точки входу в програму.
- Традиційні додатки PHP, які відповідають найкращим практикам дизайну додатків, можна перенести на фреймворки MVC з мінімальними змінами.