Создание разделов новостей
Вы уже знаете как прочитать данные из БД используя 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! Добавьте несколько новостей и сравните разницу созданных страниц.