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

Вы уже знаете как прочитать данные из БД используя CodeIgniter, но еще не знаете как их туда записывать. В этом разделе Вы расширите news контроллер и модель созданная ранее, будет содержать это назначение.

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

Для записи информации в БД необходимо создать форму, где будут вводиться данные. Это означает, что нам понадобиться форма с двумя полями, одно для заголовка и другое для текста. Вы получите образ из title в моделе. Создайте новый вид в 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="input" 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().

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

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

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 и напишите в нем сообщение об спешной операции.

Модель

Единственная вещь которая останется, это написать метод который будет записывать в БД все данные. Будет использоваться класс Квейри Билдера для вставки информации и библиотека ввода чтобы извлечь размещенные данные. Откройте Модель созданную ранее и добавьте следующее:

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 хелпером - заменяет из полученной строки все пробелы на тире (-) и переводит все символы в нижний регистр. Это дает нам хороший пример, замечательный для создания URI.

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

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

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

$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! Добавьте несколько новостей и сравните разницу созданных страниц.