Получите помощь, поддержку и профессиональное общение в Клубе CodeIgniter

# CodeIgniter User Guide Version 2.1.0

Search User Guide

# Урок — создание новых элементов

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

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

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

<h2>Создание нового элемента</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().

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

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

    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/view/news/success.php и запишите в него сообщение об успехе.

## Модель

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

    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() прежде чем запись новостей.

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

### Поделиться

Переведено в компании Аринт.

# Спасибо!

Вы тоже можете оказать помощь проекту! Как это сделать?

## Помощь и поддержка

Вы можете задать вопросы и получить ответы и советы от гуру CodeIgniter и веб-разработки: вступайте в Клуб CodeIgniter