Статьи

Распутывание MVC с CodeIgniter

Когда я впервые начал программировать, единственный тип кода, который я написал, был процедурным. Вы знаете тип, одна вещь приводит к другой с добавленной функцией тут и там, и у вас есть работающее приложение. Когда я вырос как программист, я начал понимать, что способ программирования подходит для небольших проектов, но когда я начал разрабатывать большие приложения, мой код стал очень дезорганизованным и трудным для чтения. Чтобы бороться с этим, я начал писать свои собственные классы, чтобы помочь мне написать лучший, многократно используемый код, который я мог бы использовать во всех своих приложениях. Затем я понял, что, хотя я многому научился, я заново изобретал колесо. Большинство из того, что я писал, уже было выполнено много раз в различных средах PHP. Я начал изучать почти бесконечный выбор фреймворков PHP и увидел, что большинство из них также основаны на чем-то, называемом MVC.

Обучение программированию с использованием MVC было для меня полным изменением парадигмы, но оно того стоило. Если вы хотите разрабатывать приложения со структурированным и читаемым кодом, с помощью которого можно быстро диагностировать проблемы, то MVC для вас. В этой статье я расскажу загадки MVC для вас, используя CodeIgniter, PHP-фреймворк, основанный на шаблоне MVC. Сначала я представлю общий обзор MVC, что это такое и как он может помочь вам стать лучшим программистом, а затем проведу вас через написание простой веб-формы способом CodeIgniter, чтобы вы могли увидеть, как шаблон выглядит в действии. ,

Что такое MVC?

MVC — это еще одно сокращение, которое вы хотите добавить в свою бесконечную книгу сокращений; он обозначает Model-View-Controller и представляет собой программный шаблон архитектурного проектирования. Придерживаясь шаблона MVC, вы отделите логику вашего приложения от его данных и представления. Если вы когда-либо видели такой код:

<?php if($somthing == $thisthing) echo "<p>Hello there</p>"; ?> 

тогда вы полностью понимаете, как страница, полная перепутанных PHP и HTML, может стать действительно трудной для поддержки и чтения. Итак, давайте посмотрим на каждую часть MVC и посмотрим, что представляет каждая часть.

  • Модель — инкапсулирует ваши процедуры управления данными. Обычно это часть вашего кода, которая извлекает, вставляет, обновляет и удаляет данные в вашей базе данных (или что-либо еще, что вы используете для хранилища данных).
  • Просмотр — инкапсулирует информацию, представленную пользователю. Это реальная веб-страница, RSS-канал или даже часть страницы, например верхний колонтитул.
  • Контроллер — координирует части модели и просмотра вашего приложения для ответа на запрос. Контроллер принимает входные данные от пользователя и инструктирует модель и представление выполнять действия на основе этого ввода; он контролирует поток информации в приложении.

Чтобы лучше понять, как работает шаблон MVC, давайте рассмотрим шаги, которые вы бы предприняли для кодирования формы PHP с использованием этого шаблона.

  1. Пользователь взаимодействует с представлением, которое представляет веб-форму.
  2. Пользователь отправляет форму, а Контроллер получает запрос POST. Он передает эти данные в модель.
  3. Модель обновляет и запрашивает базу данных и отправляет результат обратно в контроллер.
  4. Контроллер передает ответ Модели в Представление.
  5. Представление обновляется с новыми данными и отображается для пользователя.

Установка CodeIgniter

При таком количестве MVC-фреймворков, как вы решаете, какой из них выбрать — разве все они не предоставляют схожую функциональность, лишь немного отличающуюся по своей реализации и синтаксису? Я никогда раньше не использовал фреймворк, поэтому мне пришлось прочитать много документации и поэкспериментировать с ними, чтобы выяснить, какой из них подходит мне. Я обнаружил, что CodeIgniter имеет гораздо меньшую кривую обучения, чем другие, поэтому, вероятно, он имеет репутацию отличного новичка. Его документация очень понятна и содержит много примеров кода, которые помогут вам в этом. Хотя в этой статье я буду использовать CodeIgniter, концепция MVC будет применима практически к любой среде, которую вы выберете.

CodeIgniter — это удобный способ установки и настройки вашей системы. Выполните следующие шаги, и вы будете работать менее чем через пять минут.

  1. Загрузите последнюю версию CodeIgniter . На момент написания этой статьи последняя версия 2.0.3.
  2. Распакуйте архив и поместите несжатый каталог в корневой каталог.
  3. Переименуйте каталог из CodeIgniter_2.0.3 в CI
  4. Откройте CI/application/config/config.php и измените базовый URL на ваш сервер. В моем случае это: $config['base_url'] = "http://localhost/CI";
  5. Перейдите в каталог CI на сервере с помощью веб-браузера. Опять же, в моем случае это http://localhost/CI .

Вы завершили установку CodeIgniter и должны увидеть веб-страницу, подобную приведенной ниже:

MVC-C-01

Теперь, когда у вас все установлено, вы, вероятно, заметили все каталоги, которые есть у CodeIgniter. Не пугайтесь; вам не придется иметь дело с большинством из них, так как большая часть вашей работы будет проходить в каталоге system/application .

В каталоге system/application находятся подкаталоги, называемые controllers , models и views . Здесь вы будете размещать свои файлы для вашего приложения. Файлы вашего контроллера будут в каталоге controllers , файлы models каталоге models , а файлы для views каталоге представлений.

Меньше говори, больше кода

Теперь, когда у вас есть общее представление о том, что такое архитектура MVC, и установлен CodeIgniter, давайте приступим к некоторому кодированию. В этом примере вы создадите очень простую форму для сбора адресов электронной почты, используя вспомогательные классы формы CodeIgniter и библиотеку проверки формы. Давайте начнем.

Создать контроллер

Создайте новый файл в каталоге application/controllers именем sitepointform.php который содержит следующий код:

 <?php class Sitepointform extends CI_Controller { public function index() { // Load the Form helper which provides methods to assist // working with forms. $this->load->helper("form"); // Load the form validation classes $this->load->library("form_validation"); // As you have loaded the validation classes, you can now // apply rules to the fields you want validated. The // functions below take three arguments: // 1. The name of form field // 2. The human name of the field to be displayed in // the event of an error // 3. The names of the validation rules to apply $this->form_validation->set_rules("first", "First Name", "required"); $this->form_validation->set_rules("last", "Last Name", "required"); $this->form_validation->set_rules("email", "Email Address", "required|valid_email"); // Check whether the form validates. If not, present the // form view otherwise present the success view. if ($this->form_validation->run() == false) { $this->load->view("sitepointform_view"); } else { $this->load->view("formsuccess"); } } } 

Создать представления

Затем создайте файл в каталоге application/views именем sitepointform_view.php с этим кодом:

 <?php // Display any form validation error messages echo validation_errors(); // Using the form helper to help create the start of the form code echo form_open("sitepointform"); ?> <label for="first">First Name</label> <input type="text" name="first"><br> <label for="last">Last Name</label> <input type="text" name="last"><br> <label for="email">Email Address</label> <input type="text" name="email"><br> <input type="submit" name="submit" value="Submit"> </form> </html> 

Создайте файл application/views/formsuccess_view.php с этим кодом, который будет показан позже, когда форма будет успешно отправлена:

 <html> <head> <title>Form Success</title> </head> <body> <h3>Your form was successfully submitted!</h3> <p><a href="http://localhost/CI/index.php/sitepointform">Enter a new email address!</a></p> </body> </html> 

Теперь посетите http://localhost/CI/index.php/sitepointform/index и вы увидите свою вновь созданную форму:

MVC-CI-02

URL соответствует этому шаблону в вашем приложении:

  HTTP: // yourwebroot / [контроллер класса] / [Контроллер-метод] / [agruments] 

Здесь sitepointform является классом контроллера, а index является желаемым методом. Если бы вы переименовали метод в myForm() , URL изменился бы следующим образом:

  Http: //localhost/CI/index.php/sitepointform/myForm 

При отсутствии метода в URL, CodeIgniter примет index .

Нажмите «Отправить» без ввода в текстовые поля, чтобы проверить правильность. Вы увидите, что CodeIgniter обеспечивает соблюдение правил, которые вы установили ранее в контроллере, и отображает сообщения об ошибках.

Создать модель

Теперь, когда вы создали свою форму, вам нужно где-то хранить все имена и адреса электронной почты. Создайте таблицу addresses со следующим оператором в вашей базе данных:

 CREATE TABLE addresses ( id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, last_name VARCHAR(128) NOT NULL, first_name VARCHAR(128) NOT NULL, email VARCHAR(128) NOT NULL, PRIMARY KEY (id) ); 

Теперь, когда таблица базы данных установлена, вы должны указать CodeIgniter, где она находится. Откройте application/config/database.php и введите свои учетные данные базы данных. Укажите соответствующие значения для имени хоста , имени пользователя , пароля , базы данных и ключей dbdriver .

Затем создайте application/models/sitepointform_model.php с этим кодом:

 <?php class Sitepointform_model extends CI_Model { public function insert_address($data) { $this->load->database(); $this->db->insert("addresses", $data); } } 

У класса есть метод с именем insert_address() который принимает массив значений, переданных из контроллера. CodeIgniter имеет встроенный класс базы данных, поэтому вам вообще не нужно писать SQL; $this->db->insert() автоматически сгенерирует и выполнит для вас SQL.

Попробуй это

Чтобы использовать модель из контроллера, откройте файл application/controllers/sitepointform.php и обновите метод index() следующим образом:

 <?php public function index() { $this->load->helper("form"); $this->load->library("form_validation"); $this->form_validation->set_rules("first", "First Name", "required"); $this->form_validation->set_rules("last", "Last Name", "required"); $this->form_validation->set_rules("email", "Email Address", "required|valid_email"); if ($this->form_validation->run() == false) { $this->load->view("sitepointform_view"); } else { $first = $_POST["first"]; $last = $_POST["last"]; $email = $_POST["email"]; $data = array("first_name" => $first, "last_name" => $last, "email" => $email); $this->load->model("sitepointform_model"); $this->sitepointform_model->insert_address($data); $this->load->view("formsuccess"); } } 

Входящие данные, отправленные из формы, помещаются в ассоциативный массив для передачи в метод insert_address() модели. Обратите внимание, что ключи в массиве имеют те же имена, что и столбцы в таблице адресов. Это важно для последнего шага в создании модели. Затем модель загружается с помощью $this->load->model() , данные передаются insert_address() , и отображается представление об успешном выполнении.

Вернитесь на http://localhost/CI/index.php/sitepointform и введите некоторые данные. Если вы правильно заполните все текстовые поля, вы увидите страницу успеха, и данные теперь находятся в вашей базе данных.

MVC-C-03

Резюме

Надеюсь, теперь вы понимаете, что такое MVC, способ разделения частей вашего кода на основе их функций, чтобы все было более организованным. Несмотря на то, что CodeIgniter оказался моим предпочтительным фреймворком, знание шаблона применимо практически к любой другой фреймворке, который вы выберете, и, конечно, вы можете реализовать его в своем собственном коде без фреймворка.

Изображение через Алексея Рожановского / Shutterstock