Spec-Zone.ru › CodeIgniter 3

Создание новостей

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

Создание формы

Для ввода данных в базу данных вам необходимо создать форму, в которой вы можете ввести информацию, которая должна быть сохранена. Это означает, что вам понадобится форма с двумя полями: одно для заголовка и одно для текста. Вы будете получать slug из нашего заголовка в модели. Создайте новый вид в application/views/news/create.php.

<h2><?php echo $title; ?></h2>

<?php echo validation_errors(); ?>

<?php echo form_open('news/create'); ?>

    <label for="title">Title</label>
    <input type="text" name="title" /><br />

    <label for="text">Text</label>
    <textarea name="text"></textarea><br />

    <input type="submit" name="submit" value="Create news item" />

</form>

Здесь есть только две вещи, которые, вероятно, вам не знакомы: функция form_open() и функция validation_errors().

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

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

public function create()
{
    $this->load->helper('form');
    $this->load->library('form_validation');

    $data['title'] = 'Create a news item';

    $this->form_validation->set_rules('title', 'Title', 'required');
    $this->form_validation->set_rules('text', 'Text', 'required');

    if ($this->form_validation->run() === FALSE)
    {
        $this->load->view('templates/header', $data);
        $this->load->view('news/create');
        $this->load->view('templates/footer');

    }
    else
    {
        $this->news_model->set_news();
        $this->load->view('news/success');
    }
}

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

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

Продолжая, вы можете увидеть условие, проверяющее, прошла ли валидация формы успешно. Если нет, отображается форма, если она была отправлена **и** прошла все правила, вызывается модель. После этого загружается вид для отображения сообщения об успехе. Создайте вид в application/views/news/success.php и напишите сообщение об успехе.

Модель

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

public function set_news()
{
    $this->load->helper('url');

    $slug = url_title($this->input->post('title'), 'dash', TRUE);

    $data = array(
        'title' => $this->input->post('title'),
        'slug' => $slug,
        'text' => $this->input->post('text')
    );

    return $this->db->insert('news', $data);
}

Этот новый метод отвечает за вставку новости в базу данных. Третья строка содержит новую функцию url_title(). Эта функция, предоставляемая помощником URL, обрабатывает строку, заменяя все пробелы дефисами (-) и делая все символы строчными. Это дает вам хороший slug, идеально подходящий для создания URI.

Давайте продолжим подготовкой записи, которая будет вставлена позже, внутри массива $data. Каждый элемент соответствует столбцу в таблице базы данных, созданной ранее. Вы можете заметить новый метод здесь, а именно метод post() из библиотеки input. Этот метод гарантирует очистку данных, защищая вас от вредоносных атак со стороны других. Библиотека input загружается по умолчанию. И наконец, вы вставляете наш массив $data в нашу базу данных.

Маршрутизация

Прежде чем вы сможете начать добавлять новости в свое приложение CodeIgniter, вам необходимо добавить дополнительное правило в файл config/routes.php. Убедитесь, что ваш файл содержит следующее. Это гарантирует, что CodeIgniter распознает «create» как метод, а не как slug новости.

$route['news/create'] = 'news/create';
$route['news/(:any)'] = 'news/view/$1';
$route['news'] = 'news';
$route['(:any)'] = 'pages/view/$1';
$route['default_controller'] = 'pages/view';

Теперь откройте ваш браузер в локальной среде разработки, где вы установили CodeIgniter, и добавьте index.php/news/create в URL. Поздравляем, вы только что создали свое первое приложение CodeIgniter! Добавьте новости и проверьте разные страницы, которые вы создали.

© 2014–2020 British Columbia Institute of Technology
Licensed under the MIT License.
https://codeigniter.com/userguide3/tutorial/create_news_items.html

Spec-Zone.ru

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