Урок за PHP MVC рамка

⚡ Умно обобщение

PHP MVC Framework дизайнът разделя данните на приложението и бизнес логиката от представянето, използвайки модели, изгледи и контролери. CodeIgniter прави този модел практичен, позволявайки на PHP разработчиците да изграждат сигурни и поддържаеми уеб приложения по-бързо.

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

PHP MVC рамка

Какво е 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 рамки и функциите, които всяка рамка предлага.

Рамка Descriptйон

Codeподпалвач


Codeподпалвач


https://codeigniter.com/

Това е една от най-популярните PHP MVC рамки, вече в четвъртата си основна версия (CodeIgniter 4). Той е лек и има кратка крива на обучение. Разполага с богат набор от библиотеки, които помагат за бързото изграждане на уебсайтове и приложения. Потребители с ограничени познания по OOP програмиране също могат да го използват. Приложения, изградени с 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 захранваните приложения включват;


Zend

https://getlaminas.org/


Зенд (сега Ламинас)

Това е мощна рамка, която е;

  • Сигурен, надежден, бърз и мащабируем
  • Поддържа създаването на уеб услуги и API.

Идеален е за развитиеping бизнес приложения. През 2020 г. Zend Framework премина към проекта с отворен код Laminas. Приложенията, задвижвани от Zend/Laminas, включват;

  • Pimcore CMS,
  • DotKernel.

Компаниите, които са използвали Zend framework, включват;

  • Би Би Си
  • Cisco
  • Webex
  • Offers.com

PHP MVC Framework срещу Plain PHP: Ключови разлики

Какво всъщност променя на практика една рамка? Обикновеният PHP ви дава пълна свобода, но всеки проект в крайна сметка преоткрива маршрутизирането, валидирането и достъпа до базата данни от нулата. PHP MVC рамката стандартизира тези повтарящи се задачи, така че вашият код остава последователен в различните проекти и екипи.

Аспект Обикновен PHP PHP MVC рамка
Code организация Смесени HTML, SQL и логика в единични файлове Разделени на модели, изгледи и контролери
Достъп до база данни Ръчно написани запитвания на всяка страница Вграден конструктор на заявки или ORM с обвързване на параметри
Охрана Разработчикът трябва да помни всяка предпазна мярка Включени са филтриране на входа, XSS и CSRF защита
поддръжка Промените се разпространяват непредсказуемо през файловете Всеки слой може да се променя независимо

💡 Съвет: Първо създайте един малък, обикновен PHP проект, като например анкетата по-долу; трудностите при смесения код правят очевидна стойността на MVC разделянето.

Пренасяне на приложението за анкета на общественото мнение към Codeподпалвач

В този настойнически, създадохме PHP приложение за анкети. Тук ще пренесем този код към Codeподпалвач

  • Изтегли най-новата версия на CodeЗапалител от техния уебсайта.
  • ExtracКачете съдържанието на zip файла в директорията за разработка в директорията на вашия уеб сървър. В този урок ще използваме ciopinionpoll като име на папката.
  • Прегледайте URL http://localhost/ciopinionpoll/

CodeПоказва се началната страница на Igniter след extracизграждане на рамката

- CodeСтраницата за добре дошли на Igniter по-горе потвърждава, че рамката е инсталирана правилно. Сега ще прехвърлим нашето приложение за анкети на CodeЗапалител. Припомнете си, че нашето приложение беше разделено на три основни компонента, а именно;

  • Преден контролер – това е частта, която реагира на URL заявява и връща заявената страница. Този код ще влезе в контролера
  • Модел – това е кодът, който отговаря на заявки за данни и връща заявените данни. Този код ще влезе в модела
  • Изгледи – това е кодът, който отговаря за форматирането и показването на данните. Този код ще влезе в изгледа

Настройки за конфигурация на база данни

За да конфигурирате връзката с базата данни:

  • Отидете до папката ciopinionpoll
  • Отворете база данни.php файл, разположен в директорията application/config.
  • Намерете следните редове код

Настройки за конфигурация на базата данни в CodeФайл с база данни на Igniter.php

  • Задайте потребителското име на root
  • Задайте паролата си на root паролата на localhost
  • Задайте името на базата данни на 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Контролерът на запалката се намира в 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
  • „Публична функция __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. Кликнете върху OK, без да избирате опция, и ще видите следното предупредително съобщение.

Съобщение за предупреждение за валидиране, което се показва, когато не е избран глас

Гласувайте за любимата си библиотека, след което кликнете върху OK. Ще видите следната страница с резултати

Страница с резултати от анкета, показваща броя на гласовете на JavaБиблиотека със скриптове

Това потвърждава, че трите слоя работят заедно: контролерът е получил гласа, моделът го е съхранил и преброил, а изгледът е показал общите суми.

Въпроси и Отговори

HMVC (Йерархичен контролер за изглед на модел) организира приложението в независими MVC триади, които могат да се извикват една друга. Фреймуъркове като Кохана популяризира HMVC, защото помага за модуларизиране на големи приложения.

Да. Laravel в момента е най-популярната PHP MVC рамка. Тя следва същото разделение Model-View-Controller, описано тук, добавяйки инструменти като шаблоните Eloquent ORM и Blade.

да Инструменти като Копилот на GitHub може да изгражда модели, контролери и изгледи от подкани. Все пак трябва да прегледате генерирания код за проблеми със сигурността, като например неекраниран изход и SQL инжектиране.

Не. Асистентите с изкуствен интелект ускоряват писането на код, но фреймуърците все още предоставят тествана структура, настройки по подразбиране за сигурност и конвенции, които поддържат приложенията поддържаеми. Двете работят най-добре заедно.

Не. Codeподпалвач е лесен за използване от разработчици с ограничен опит в обектно-ориентирано програмиране. Познаването на класове, методи и основно наследяване е достатъчно, за да се следват неговите модели и шаблони на контролери.

Обобщете тази публикация с: