Урок 3 — Контроллер и виды.

В этом уроке рассмотрим создание своих контроллеров и своих видов. Так же разберем как работать с массивами и как передавать данные из массивов в виды и отображать информацию.

Смотрите и обучайтесь.
Выставляйте качество 480р.

И так, при создании контроллера в самом верху нужно писать вот такую строку:


<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

Данную строку рекомендуют оставлять разработчики Codeigniter в целях безопасности, хотя это не обязательно. Но я всегда ее пишу, так как это не доставляет никаких неудобств и совершенно не сложно :)

Далее, нам нужно проинициализировать наш контроллер. Делается это так:


<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class First extends CI_Controller {

}

Важно, название контроллера пишем с большой буквы, и называем его так же как называется наш файл. То есть, если файл Вы назвали, например, first.php — тогда название пишем First. Название контроллера пишется после слова class.

То что идет после названия контроллера — это наследие родительского класса контроллера, чтобы мы могли пользоваться всеми прелестями Codeigniter‘a. Особо в это я не вникал, надо так писать — пишу :) и Вам советую во всякие мелочи не вникать, так как сути это не изменит.

Двигаемся дальше. После инициализации контроллера, открываем фигурные скобки (тело контроллера) и здесь, внутри будем создавать различные функции.

Как это делать? Очень просто:

public function index()
{

}

Если Вы называете функцию index, то это значит, что данная функция будет загружаться при обращении к контроллеру по умолчанию. И внутри скобок функции пишем логику приложения, какой вид ему загружать, модель, библиотеку и так далее.

Вот базовая конструкция в целом.


<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class First extends CI_Controller {

  public function index()
  {

  }

}

Наверняка Вам интересно как же обратиться к созданному контроллеру. Пишем в адресной строке следующее:

http://localhost/cilessons/index.php/first/index 

где:

cilessons — папка с нашим проектом
index.php — нужная штука
first — наш контроллер
index — функция в контроллере, на этом месте могла быть любая другая функция контроллера. Так как функция indexзагружается по умолчанию при загрузке контроллера, можем ее даже не писать в строке, то есть: http://localhost/cilessons/index.php/first/ даст такой же результат.

Давайте создадим вид и загрузим его в нашем контроллере в функции по умолчанию. Создаем .php файл с обычным HTML кодом и между тегами body напишите любую фразу, чтобы проверить работу контроллера и его функции.

Вот например так:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

<head>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
<meta name="author" content="Дмитрий Валак" />
<title>Untitled 2</title>
</head>

<body>

<p>Привет!</p>

</body>
</html>

Пускай этот файл будет называться hello_view.php и сохраняем его в папку application->views. Рекомендую называть виды с приставкой _view, так будет легче отличать их среди всех остальных файлов при работе.

И чтобы загрузить этот файл, в контроллере — в нашей функции по умолчанию пишем так:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class First extends CI_Controller {

  public function index()
  {
      $this->load->view('hello_view');
  }

}

Заметьте, что при загрузке вида, мы пишем только его название БЕЗ приставки .php

В Codeigniter в принципе вся работа основана на массивах, и нам нужно научится создавать массивы и передавать их содержимое в вид. Давайте создадим в этом же контроллере First новую функцию, например, about и в ней создадим несколько массивов с данными и передадим их в вид.

Смотрим:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class First extends CI_Controller {

  public function index()
  {
      $this->load->view('hello_view');
  }

  public function about()
  {
      $data['name'] = 'Дмитрий'; //создаем массив data и его элемент name
      $data['s_name'] = 'Валак'; //создаем массив data и его элемент s_name
      $data['age'] = 20; //создаем массив data и его элемент age

      $this->load->view('about_view', $data); // вторым параметром передаем все элементы массива data в вид.
  }

}

И давайте посмотрим как в виде выглядит вывод этих элементов массива data.


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

<head>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
<meta name="author" content="Дмитрий Валак" />
<title>Untitled 2</title>
</head>

<body>

<p><?=$name;?></p> //Вывод элемента name из массива data
<p><?=$s_name;?></p> //Вывод элемента s_name из массива data
<p><?=$age;?></p> //Вывод элемента age из массива data

</body>
</html>

Ну вот и все. Ничего сложного нету. Главное пробовать :)
Попрактикуйтесь, посоздавайте виды и контроллеры, попередавайте информацию из массивов в виды, и когда Вы это закрепите — двигайтесь дальше :)

Если урок Вам был полезен, нажмите на любую кнопку ниже— буду благодарен :) Всем удачи и следите за ходом событий ;)

Комменты

  • Здравствуйте. Почему когда жмёшь На кнопку «Назад», то едешь вперёд, а когда на кнопку «Вперёд», то наоборот назад?

  • kak proveryat kantrolera est v codeignaytere

  • kak izbavitca ot » kavicek naprimer http://test4.ru/code/pages» pages eto kontroller dayot 403 error ili
    http://test4.ru/code«(http://test4.ru/code kornevaya papka)

  • Скажите, как прописывать сылку на контроллер? Т.е. например у меня три контроллера:
    main,about,contact например. Сейчас я нахожусь в контроолере main. Как мне прописать, например ссылку для элемента меню Контакты, ссылку на контроллер contacts?

  • Скажите, а как сделать, чтобы индексный файл по умолчанию открывался не index.php a например контроллер main?

    • Дмитрий Валак: 19-01-2014 в 23:44

      Заходите в папку application->config->routes.php и в строке $route[‘default_controller’] = «контроллер/функция/параметры»; прописываете адрес, который вам нужен.

      • Спасибо! То, что нужно! Только меня смущает еще один момент. Как сделать, чтобы все контроллеры открывались вида http://www.ru/main, http://www.ru/about, http://www.ru/contact?
        А то этакая строчка как-то смущает)

        • Теперь дргуая проблема… Теперь не могу прописать ссылки на сайте…. Сайт открывается и по умолчанию загружается контроллер MAIN — это хорошо, радует, а дальше… Как прописывать ссылки? В обще не понятно.

        • Дмитрий Валак: 20-01-2014 в 12:00

          Что Вас смущает index.php?
          Чтобы его убрать я использую этот код:

          RewriteEngine on
          RewriteCond $1 !^(index\.php|resources|robots\.txt)
          RewriteCond %{REQUEST_FILENAME} !-f
          RewriteCond %{REQUEST_FILENAME} !-d
          RewriteRule ^(.*)$ /index.php?/$1 [L,QSA]

          Прописывается в файле .htaccess и сохраняется в корень сайта

  • При проверке $id ему присваивается значение:
    if ($id = 1) {
    А нужно проверить на равенство:
    if ($id == 1) {

    Жаль, что php не проверяет условия.

  • на вот этот мейл info@2develop.ru  ?

  • Здраствуйте Дмитрий! у меня возникла проблема при прохождении вашего курса по codeigniter.не могли бы вы посмотреть в чем дело ? что бы не засорять коментарии кодом я выложил код на форуме взгляните пожалуйста .вот здесь описана вся проблема http://www.masterwebs.ru/index.php?showtopic=13151

    • Дмитрий Валак: 15-11-2012 в 16:01

      Посмотрел — трудно точно сказать, не вижу целостность картины. Скиньте на e-mail весь сайт с бд, может тогда смогу помочь.