Урок за PHP MVC Framework: Пример за CodeIgniter

Какво е PHP MVC рамка?

PHP MVC е шаблон за проектиране на приложение, който разделя данните на приложението и бизнес логиката (модела) от презентацията (изгледа). MVC означава модел, изглед и контролер.

Контролерът посредничи между моделите и изгледите.

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

Рамка Descriptйон

CodeIgniter


CodeIgniter


https://codeigniter.com/

Това е една от най-популярните PHP MVC рамки. Той е лек и има кратка крива на обучение. Има богат набор от библиотеки, които помагат за бързото изграждане на уебсайтове и приложения. Потребители с ограничени познания за ООП програмиране също могат да го използват. Задвижваните от CodeIgniter приложения включват;


Кохана


Кохана


http://kohanaframework.org

Това е сигурна и лека рамка на HMVC контролер за изглед на йерархичен модел. Има богат набор от компоненти за бързо разработване на приложения. Компаниите, които използват Kohana, включват;


CakePHP


CakePHP


www.cakephp.org

Моделиран е след Ruby on rails. Известен е с концепции като модели на софтуерен дизайн, конвенция над конфигурация, ActiveRecord и т.н. CakePHP захранваните приложения включват;


Zend

www.framework.zend.com


Zend

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

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

Той включва API от доставчици като Amazon, Google, Flickr, Yahoo и др. Идеален е за разработване на бизнес приложения. Задвижваните от Zend приложения включват;

  • Pimcore CMS,
  • DotKernel.

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

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

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

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

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

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

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

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

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

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

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

  • Задайте потребителското име на root
  • Задайте паролата на вашата root парола за localhost
  • Име на базата данни към 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); 
        } 
   } 
?>

ТУК,

  • „клас Opinion_poll_model разширява 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
  • „публична функция __construct()“ извиква метода на конструктора на класа на CI_Controller и зарежда нашия модел Opinion_poll_model
  • „публична функция 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/

Тестване на PHP MVC рамка

Щракнете върху бутона OK, ще видите следното предупредително съобщение

Тестване на PHP MVC рамка

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

Тестване на PHP MVC рамка

Заключение

CodeIgniter е лесна за научаване и използване PHP MVC рамка, която може значително да намали времето, изразходвано за разработване на приложения.
CodeIgniter е лесна за научаване и използване PHP MVC рамка, която може значително да намали времето, изразходвано за разработване на приложения.

Oбобщение

  • Рамката е набор от библиотеки, които осигуряват частично изпълнение на общи задачи.
  • PHP има редица зрели и тествани MVC рамки с отворен код.
  • Добрият подход за разработка отделя данните от презентацията и насърчава използването на единична входна точка в приложението.
  • Традиционните PHP приложения, които следват най-добрите практики за проектиране на приложения, могат да бъдат пренесени към MVC рамки с минимални модификации.