Spec-Zone.ru › CodeIgniter 4

Представления

  • Создание представления
  • Отображение представления
  • Загрузка нескольких представлений
  • Сохранение представлений в подкаталогах
  • Представления с именованными пространствами
  • Кэширование представлений
  • Добавление динамических данных в представление
  • Создание циклов

Представление — это просто веб-страница или фрагмент страницы, например, заголовок, подвал, боковая панель и т. д. Фактически, представления могут гибко встраиваться в другие представления (в другие представления и т. д.), если вам нужна такая иерархия.

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

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

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

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

<html>
    <head>
        <title>My Blog</title>
    </head>
    <body>
        <h1>Welcome to my Blog!</h1>
    </body>
</html>

Затем сохраните файл в каталоге app/Views.

Отображение представления

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

echo view('name');

Где name — имя вашего файла представления.

Важно

Если расширение файла опускается, предполагается, что представления заканчиваются расширением .php.

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

<?php

namespace App\Controllers;

class Blog extends \CodeIgniter\Controller
{
    public function index()
    {
        echo view('BlogView');
    }
}

Если вы посетите свой сайт по ранее используемому URL-адресу, вы увидите ваше новое представление. URL-адрес был похож на этот:

example.com/index.php/blog/

Примечание

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

Загрузка нескольких представлений

CodeIgniter будет интеллектуально обрабатывать несколько вызовов view() из контроллера. Если произойдет более одного вызова, они будут добавлены вместе. Например, вы можете захотеть иметь представление заголовка, представление меню, представление содержимого и представление подвала. Это может выглядеть примерно так:

<?php

namespace App\Controllers;

class Page extends \CodeIgniter\Controller
{
    public function index()
    {
        $data = [
            'page_title' => 'Your title',
        ];

        echo view('header');
        echo view('menu');
        echo view('content', $data);
        echo view('footer');
    }
}

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

Сохранение представлений в подкаталогах

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

echo view('directory_name/file_name');

Представления с именованными пространствами

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

Если у вас есть Blog каталог, в котором настроено отображение PSR-4 в Автозагрузчике внутри пространства имен Example\Blog, вы можете получить файлы представлений, как будто они имеют именованные пространства имен. Следуя этому примеру, вы можете загрузить файл BlogView из /blog/views, добавив префикс пространства имен к имени представления:

echo view('Example\Blog\Views\BlogView');

Кэширование представлений

Вы можете кэшировать представление с помощью команды view , передав опцию cache с количеством секунд, на которое нужно кэшировать представление, в качестве третьего параметра:

// Cache the view for 60 seconds
echo view('file_name', $data, ['cache' => 60]);

По умолчанию представление будет кэшироваться с тем же именем, что и файл представления. Вы можете настроить это, передав cache_name и идентификатор кэша, который вы хотите использовать:

// Cache the view for 60 seconds
echo view('file_name', $data, ['cache' => 60, 'cache_name' => 'my_cached_view']);

Добавление динамических данных в представление

Данные передаются из контроллера в представление с помощью массива во втором параметре функции представления. Вот пример:

$data = [
    'title'   => 'My title',
    'heading' => 'My Heading',
    'message' => 'My Message',
];

echo view('blogview', $data);

Давайте попробуем это с файлом контроллера. Откройте его и добавьте этот код:

<?php

namespace App\Controllers;

class Blog extends \CodeIgniter\Controller
{
    public function index()
    {
        $data['title']   = "My Real Title";
        $data['heading'] = "My Real Heading";

        echo view('blogview', $data);
    }
}

Теперь откройте файл представления и измените текст на переменные, соответствующие ключам массива в ваших данных:

<html>
    <head>
        <title><?= $title ?></title>
    </head>
    <body>
        <h1><?= $heading ?></h1>
    </body>
</html>

Затем загрузите страницу по используемому URL-адресу, и вы должны увидеть замененные переменные.

Передаваемые данные доступны только во время одного вызова view. Если вы вызываете функцию несколько раз в одном запросе, вам нужно будет передавать желаемые данные каждому представлению. Это предотвращает «просачивание» данных в другие представления, что может привести к проблемам. Если вы хотите, чтобы данные сохранялись, вы можете передать опцию saveData в массив $option в третьем параметре.

$data = [
    'title'   => 'My title',
    'heading' => 'My Heading',
    'message' => 'My Message',
];

echo view('blogview', $data, ['saveData' => true]);

Кроме того, если вы хотите, чтобы функция представления по умолчанию сохраняла данные между вызовами, вы можете установить $saveData в true в app/Config/Views.php.

Создание циклов

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

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

<?php

namespace App\Controllers;

class Blog extends \CodeIgniter\Controller
{
    public function index()
    {
        $data = [
            'todo_list' => ['Clean House', 'Call Mom', 'Run Errands'],
            'title'     => 'My Real Title',
            'heading'   => 'My Real Heading',
        ];

        echo view('blogview', $data);
    }
}

Теперь откройте файл представления и создайте цикл:

<html>
<head>
    <title><?= $title ?></title>
</head>
<body>
    <h1><?= $heading ?></h1>

    <h3>My Todo List</h3>

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

        <li><?= $item ?></li>

    <?php endforeach;?>
    </ul>

</body>
</html>

© 2014–2020 British Columbia Institute of Technology
Licensed under the MIT License.
https://codeigniter.com/user_guide/outgoing/views.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API