Образовательный проект «SnakeProject» Михаила Козлова

Навигация

⇒ WEB Разработка ⇐

CISCO

Voice(Asterisk\Cisco)

Microsoft

Powershell

Python

SQL\T-SQL

FreeBSD and Nix

Общая

ORACLE SQL \ JAVA

Мото

Стрельба, пневматика, оружие

Саморазвитие и психология


Codeigniter: Основные темы


Что такое контроллер?
Если мы прописывали роутинг в предыдущих примерах, нам надо добавить в routes.php :
($route['blog'] = 'blog';
$route['blog/(:any)'] = 'blog/$1';)

Контроллер это просто класс, который называется так, чтобы ассоциироваться с URI.

Рассмотрим этот URI:
site/index.php/blog/
 
В этом примере CodeIgniter будет искать контроллер blog.php и загрузит его.
Когда имя контроллера совпадает с первым сегментом URI, он будет загружен.

Hello World!
Используя текстовый редактор, создайте файл blog.php(в application/controllers) и поместите в него код:

<?php
class Blog extends CI_Controller {

    public function index()
    {
        echo 'Hello World!';
    }
}

Теперь посетите сайт, используя URL, соответствующий этому:
site/index.php/blog/

Имя класса должно начинаться с большой буквы. Иначе говоря, вот это правильно:

<?php
class Blog extends CI_Controller {

}; 
А это НЕ правильно:
<?php
class blog extends CI_Controller {

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

Функции
В примере выше мы создали функцию index(). «Индексная» функция всегда загружается по умолчанию, если второй сегмент URI пуст.

 Другой способ увидеть "Hello world" будет таким:
site/index.php/blog/index/ 

Второй сегмент URI определяет, какая функция контроллера будет вызвана.
Попробуйте это. Добавьте новую функцию в ваш контроллер:

<?php
class Blog extends CI_Controller {

        public function index()
        {
            echo 'Hello World!';
        }

        public function comments()
        {
            echo 'Look at this!';
        }
    
}

Теперь загрузите следующий URL, чтобы увидеть функцию comments:
site/index.php/blog/comments/ 

Вы увидите ваше новое сообщение.

Передача сегментов URI в ваши функции
Если URI содержит более двух сегментов, тогда они могут быть переданны в функцию просто как параметры.
Например, предположим, что вы имеете URI вроде этого:

site/index.php/blog/article/news/123

Вашей функции будут переданы третий и четвертый сегменты URI ("news" and "123"):

Переделаем blog.php:

<?php
class Blog extends CI_Controller {

        public function index()
        {
            echo 'Hello World!';
        }

        public function comments()
        {
            echo 'Look at this!';
        }
        
        public function article($news, $id)
           {
                echo $news;
                echo $id;
          }
    
}

Вызовем site/index.php/blog/article/news/123

На экране увидим "news123"

Приватные функции
В некоторых случаях вы можете пожелать скрыть определенные функции от публичного доступа. 

Чтобы сделать приватную функцию, просто добавьте символ подчеркивания перед ее именем, и она не будет обслуживаться через запросы URL. 

Например, если вы имеете функцию вроде этой:

private function _utility()
        {
          // some code
        }


Организация контроллеров в поддиректориях
Если вы строите большое приложение, возможно вы найдете удобным организовать контроллеры в поддиректориях. CodeIgniter позволяет сделать это.

Просто создайте новые директории внутри вашей директории application/controllers и поместите туда файлы с классами контроллеров.

Примечание: При использовании этой функции первый сегмент URI будет указывать на директорию. Например, давайте предположим, что вы имеете контроллер, находящийся здесь:

application/controllers/blog/blog.php

Чтобы вызвать этот контроллер, ваш URI должен выглядеть примерно так:

http://site/index.php/blog/blog/article/news/123

На экране увидим "news123"

 

Отображения это просто веб-страницы, или фрагменты страниц, такие как шапка, футер, колонка и т.д.

Отображения никогда не вызываются напрямую, они должны быть загружены контроллером.

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

Загрузка отображения
Чтобы загрузить конкретный файл отображения, используйте следующую функцию:

$this->load->view('name');

Где name это имя файла отображения. Примечание: расширение .php можно не указывать, так как при желании вы можете использовать другое.

Теперь откройте ваш файл контроллера blog.php, который вы сделали ранее, и замените echo() на следующую функцию:

<?php
class Blog extends CI_Controller {

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

Вызовем http://site/index.php/blog/blog/ (т.к. мы его переместили в подпапку в прошлом уроке) и увидим отображение.

Загрузка множественных отображений
CodeIgniter будет разумно обрабатывать множественные вызовы $this->load->view из контроллера. 

Они будут объединяться. 

Например, вы можете иметь отображение шапки, меню, содержимого и футера. Это может выглядеть примерно так:


<?php

class Page extends CI_Controller {

    function index()
    {
        $data['page_title'] = 'Your title';
        $this->load->view('header');
        $this->load->view('menu');
        $this->load->view('content', $data);
        $this->load->view('footer');
    }

}
?>

В примере выше мы использовали «динамически добавленные данные», как вы увидите ниже.
Хранение отображений в поддиректории
Ваши файлы отображений могут также храниться в поддиректориях. Указывайте имя поддиректории при загрузке отображения:

$this->load->view('folder_name/file_name');

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

$data = array(
    'title' => 'My Title',
    'heading' => 'My Heading',
    'message' => 'My Message'
);

$this->load->view('blogview', $data);

Давайте попробуем это в вашем контроллере. Откройте его(у меня это например из предыдущего урока blog.php) и измените на этот код:

<?php
class Blog extends CI_Controller {

        public function index()
        {
            $data['title'] = "My Real Title";
            $data['heading'] = "My Real Heading";

            $this->load->view('blogview', $data);
        }


Теперь откройте ваш файл blogview.php в application/views,  и замените тексст на переменные, которые соответствуют ключам массивов в ваших данных:

<html>
<head>
<title><?php echo $title;?></title>
</head>
<body>
    <h1><?php echo $heading;?></h1>
</body>
</html>

Потом загрузите страницу, и вы увидите, что переменные используются.

Создание циклов
Массивы данных, которые вы передаете в ваши отображения, не ограничены простыми переменными.

Вы можете передавать многомерные массивы, которые могут быть использованы для цикличной генерации множества строк. 

Например, если вы получили данные из вашей БД, они обычно будут в виде многомерного массива.

Вот простой пример. Добавьте в ваш контроллер:

<?php
class Blog extends CI_Controller {

        public function index()
        {
            $data['todo_list'] = array('Clean House', 'Call Mom', 'Run Errands');

            $data['title'] = "My Real Title";
            $data['heading'] = "My Real Heading";

            $this->load->view('blogview', $data);
        }

Теперь откройте ваш файл blogview.php в application/views, и создайте цикл:

<html>
<head>
<title><?php echo $title;?></title>
</head>
<body>
<h1><?php echo $heading;?></h1>

<h3>My Todo List</h3>

<ul>
<?php 
foreach ($todo_list as $item):

    echo "<li>$item</li>";

endforeach;
?>
</ul>

</body>
</html>

И вызовем: http://site/index.php/blog/blog/

 

Модели опционально доступны для тех, кто хочет следовать более традиционному подходу MVC.

Что такое модель?
Модели — это классы PHP, которые разработаны, чтобы работать с информацией в базе данных.

Анатомия модели
Классы моделей хранятся в директории application/models/. 

Основной прототип моделей таков:

class Model_name extends CI_Model {

    function __construct()
    {
        parent::__construct();
    }
}

Где Model_name — это имя вашего класса. Имена классов должны начинаться с большой буквы, а остальная часть названия должна быть в нижнем регистре. Убедитесь, что ваш класс расширяет основной класс Model.

Имя файла соответствует имени класса, но пишется полностью в нижнем регистре. 

Если ваш класс называется "Model_name", то файл будет таким:

application/models/model_name.php

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

$this->load->model('model_name');

Если ваша модель находится в поддиректории, включите относительный путь от директории моделей. Например, если модель находится в application/models/blog/queries.php, загружайте ее, используя:

$this->load->model('blog/queries');

Загруженная модель доступна для использования по имени ее класса:

$this->load->model('model_name');

$this->model_name->function(); 

Если вы хотите ассоциировать вашу модель с именем другого объекта, вы можете указать его во втором параметре функции:

$this->load->model('model_name', 'fubar');

$this->fubar->function(); 

Вот пример контроллера, который загружает модель, и затем обслуживает отображение:

class Blog_controller extends CI_Controller {

function blog()
    {
    $this->load->model('blog');

    $data['query'] = $this->blog->get_last_ten_entries();

    $this->load->view('blog', $data);
    }
}

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

 Чтобы сделать это, откройте ваш файл application/config/autoload.php и добавьте модель в массив автозагрузки.

 

Помощники, как понятно из названия, помогают вам решать задачи. Каждый файл помощника — это просто коллекция функций в определенной категории. 

Есть помощники URL, которые помогают создавать ссылки, есть помощники Form, которые помогают создавать элементы форм, помощники Text выполняют различные операции форматирования текста, помощники Cookie устанавливают и считывают куки, помощники File помогают вам работать с файлами и так далее.

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

Помощники обычно храняться в директориях system/helpers и application/helpers . CodeIgniter сначала ищет в директории application/helpers. Если эта директория не существует, или если указанный помощник в ней не обнаружен, CodeIgniter будет искать в глобальной директории system/helpers.

Загрузка помощника
Файлы помощников загружаются следующей функцией

$this->load->helper('name');

Где name это имя файла помощника, без расширения .php, и постфикса _helper.

Чтобы загрузить файл помощника URL, который называется url_helper.php, сделайте следующее:

$this->load->helper('url');

Загрузка нескольких помощников
Вы можете указать список требуемых помощников в массиве, например так:

$this->load->helper( array('helper1', 'helper2', 'helper3') );

Автозагрузка помощников
Если вы обнаружили, что нуждаетесь в конкретном помощнике глобально по всему приложению, вы можете попросить CodeIgniter автоматически загружать его при инициализации системы. Чтобы сделать это, откройте ваш файл application/config/autoload.php и добавьте имя нужного помощника в массив автозагрузки. Подробные инструкции вы найдете в этом файле.

Использование помощника
После загрузки файла помощника, содержащего функции, вы можете использовать их, просто как обычные функции PHP.

Например, чтобы создать ссылку используя функцию anchor() в одном из ваших отбражений, вы можете сделать так:

<?php echo anchor('blog/comments', 'Click Here');?> 

Где "Click Here" это имя ссылки, и "blog/comments" это URI к контроллеру и функции, с которыми связывает эта ссылка.

 

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

$this->load->library('class name'); 

Где class name — это имя класса, который вы хотите загрузить. Например, чтобы загрузить библиотеку валидаци форм, сделайте так:

$this->load->library('form_validation'); 

Загруженный класс вы можете использовать, как показано на страницах Руководства, посвященных этому классу.

Вы можете загрузить несколько библиотек, передав массив.

$this->load->library(array('email', 'table'));

 

В большинстве случаев используется соответствие один-к-одному между строкой URL и соответствующим методом и классом контроллера.

 Обычно сегменты URI соответствуют этому шаблону:

example.com/class/function/id/

Установка ваших собственных правил
Правила роутинга определяются в файле application/config/routes.php. 

В нем вы найдете массив $route, который позволяет вам определить собственные критерии роутинга. 

Роуты могут быть определены посредством шаблонов или регулярных выражений

Шаблоны
Обычные шаблоны выглядят примерно так:

$route['product/(:num)'] = "catalog/product_lookup";

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

В примере выше, если слово "product" найдено в первом сегменте URI, и число во втором, будет загружен контроллер catalog и вызван его метод product_lookup.

Вы можете указывать литеральные значения, или использовать два типа шаблонов:

(:num) совпадет с сегментом, который содержит только цифры.
(:any) совпадет с сегментом, содержащим любой символ. 

Примеры:

$route['journals'] = "blogs";
URL, содержащий слово "journals" в первом параметре, будет перенаправлен в класс "blogs".

$route['blog/joe'] = "blogs/users/34"; 
URL, содержащий сегменты blog/joe, будет перенаправлен в класс "blogs" методу "users". Идентификатор будет установлен в "34".

$route['product/(:any)'] = "catalog/product_lookup";
URL, содержащий слово "product" в первом сегменте, и любое содержание во втором, будет перенаправлен в класс "catalog" и функцию "product_lookup".

$route['product/(:num)'] = "catalog/product_lookup_by_id/$1"; 
URL со словом "product" в первом сегменте, и с номером во втором, будет перенаправлен в класс "catalog", и его методу "product_lookup_by_id" будет передана переменная из второго сегмента URI.

Регулярные выражения
Если вы предпочитаете регулярные выражения, вы можете использовать их для определения роутов. Допустимо любое правильное регулярное выражение, а также обратные ссылки.

Пример:

$route['products/([a-z]+)/(\d+)'] = "$1/id_$2";

В этом примере URI, соответствующий products/shirts/123 вызовет контроллер shirts и функцию id_123.
Также вы можете смешивать шаблоны и регулярные выражения.

Зарезервированные роуты
Есть два зарезервированных роута:

$route['default_controller'] = 'welcome';

$route['404_override'] = '';


Комментарии пользователей

Эту новость ещё не комментировалиНаписать комментарий
Анонимам нельзя оставоять комментарии, зарегистрируйтесь!

Контакты Группа ВК Сборник материалов по Cisco, Asterisk, Windows Server, Python и Django, SQL и T-SQL, FreeBSD и LinuxКод обмена баннерами Видео к IT статьям на YoutubeВидео на другие темы Смотреть
Мои друзья: Советы, помощь, инструменты для сис.админа, статическая и динамическая маршрутизация, FreeBSD

© Snakeproject.ru создан в 2013 году.
При копировании материала с сайта - оставьте ссылку.

Рейтинг@Mail.ru
Рейтинг@Mail.ru Яндекс.Метрика





Поддержать автора и проект