105 lines
5.1 KiB
Markdown
105 lines
5.1 KiB
Markdown
|
# Контроллеры
|
|||
|
|
|||
|
Контроллеры являются промежуточным звеном между моделью и представлением. Они передают информацию в модель для изменения данных, и запрашивают информацию от модели. Например, операции работы с базой данных: вставка (insert), изменение (update) и удаление (delete) как операции редактирования данных, и выборка (select) для извлечения данных. Информацию, полученную от модели, контроллеры перенаправляют в представления, которые содержат конечный результат, предназначенный для отображения пользователям.
|
|||
|
|
|||
|
Контроллеры вызываются с помощью URL. За более подробной информацией обратитесь к разделу [URL и ссылки](start.urls).
|
|||
|
|
|||
|
|
|||
|
|
|||
|
## Название контроллера и его содержание
|
|||
|
|
|||
|
Имя класса контроллера должно соответствовать имени файла.
|
|||
|
|
|||
|
**Соглашения при использовании контроллеров**
|
|||
|
|
|||
|
* имя файла должно быть в нижнем регистре, например: `articles.php`
|
|||
|
* файл контроллера должен располагаться в (под-)директории **classes/controller**, например: `classes/controller/articles.php`
|
|||
|
* имя класса контроллера должно соответствовать имени файла, начинаться с заглавной буквы и должно начинаться с префикса **Controller_**, например: `Controller_Articles`
|
|||
|
* класс контроллера должен быть потомком класса Controller.
|
|||
|
* методы контроллера, предназначенные для вызова через URI, должны начинаться с префикса **action_** (например: `action_do_something()` )
|
|||
|
|
|||
|
|
|||
|
|
|||
|
### Пример простейшего контроллера
|
|||
|
|
|||
|
Создадим простой контроллер, который будет выводить на экран 'Hello World!'.
|
|||
|
|
|||
|
**application/classes/controller/article.php**
|
|||
|
~~~
|
|||
|
<?php defined('SYSPATH') OR die('No direct access allowed.');
|
|||
|
|
|||
|
class Controller_Article extends Controller
|
|||
|
{
|
|||
|
public function action_index()
|
|||
|
{
|
|||
|
echo 'Hello World!';
|
|||
|
}
|
|||
|
}
|
|||
|
~~~
|
|||
|
Теперь, если открыть адрес yoursite.com/article (или yoursite.com/index.php/article, если не используется URL rewritting), то можно увидеть
|
|||
|
~~~
|
|||
|
Hello World
|
|||
|
~~~
|
|||
|
Вот он, Ваш первый контроллер. Он соответствует всем указанными правилам.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
### Пример более сложного контроллера
|
|||
|
|
|||
|
В предыдущем примере метод `index()` вызывается посредством url yoursite.com/article. Если второй сегмент url не указан, используется метод index. Он также может быть вызван явно следующим url: yoursite.com/article/index
|
|||
|
|
|||
|
_Второй сегмент url определяет метод, который используется в вызываемом контроллере._
|
|||
|
|
|||
|
**application/classes/controller/article.php**
|
|||
|
~~~
|
|||
|
class Controller_Article extends Controller
|
|||
|
{
|
|||
|
public function action_index()
|
|||
|
{
|
|||
|
echo 'Hello World!';
|
|||
|
}
|
|||
|
|
|||
|
public function action_overview()
|
|||
|
{
|
|||
|
echo 'Article list goes here!';
|
|||
|
}
|
|||
|
}
|
|||
|
~~~
|
|||
|
Теперь, если в адресной строке указать адрес yoursite.com/article/overview, то браузер выведет:
|
|||
|
~~~
|
|||
|
Article list goes here!
|
|||
|
~~~
|
|||
|
|
|||
|
|
|||
|
### Вызов контроллера с аргументами
|
|||
|
|
|||
|
Допустим, стоит задача отобразить определённую статью. Например, статья с наименованием `your-article-title` и с идентификатором `1`.
|
|||
|
|
|||
|
URL будет выглядить следующим образом: yoursite.com/article/view/**your-article-title/1**. Последние два сегменти URL строки передаются в метод view().
|
|||
|
|
|||
|
**application/classes/controller/article.php**
|
|||
|
~~~
|
|||
|
class Controller_Article extends Controller
|
|||
|
{
|
|||
|
public function action_index()
|
|||
|
{
|
|||
|
echo 'Hello World!';
|
|||
|
}
|
|||
|
|
|||
|
public function action_overview()
|
|||
|
{
|
|||
|
echo 'Article list goes here!';
|
|||
|
}
|
|||
|
|
|||
|
public function action_view($title, $id)
|
|||
|
{
|
|||
|
echo $id . ' - ' . $title;
|
|||
|
// в идеале следует извлекать запись из базы данных
|
|||
|
}
|
|||
|
}
|
|||
|
~~~
|
|||
|
При переходе на страницу yoursite.com/article/view/**your-article-title/1** , можно будет увидеть
|
|||
|
~~~
|
|||
|
1 - your-article-title
|
|||
|
~~~
|