뉴스 항목 생성

이제 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() 함수입니다.

첫 번째 함수는 폼 헬퍼 가 제공하며 폼 요소를 렌더링하고 숨겨진 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() 메소드는 세 개의 인수를 받습니다: 입력 필드 이름, 오류 메시지에 사용될 이름, 규칙. 이 경우 title과 text 필드가 필수입니다.

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 헬퍼 가 제공하며, 전달된 문자열을 정리하고 모든 공백을 대시(-)로 교체하며 모든 것을 소문자로 만듭니다. 결과는 URI 생성에 완벽한 깔끔한 slug입니다.

나중에 삽입될 레코드 준비를 계속합니다. $data 배열 내부의 각 요소는 앞서 만든 데이터베이스 테이블의 열에 해당합니다. 여기서 새 메소드인 input 라이브러리post() 메소드를 볼 수 있습니다. 이 메소드는 데이터가 살균되어 다른 사람들의 공격으로부터 보호됩니다. 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를 설치한 로컬 개발 환경으로 브라우저를 향하고 URL에 index.php/news/create 를 추가하세요. 축하합니다, 첫 번째 CodeIgniter 애플리케이션을 만들었습니다! 뉴스를 추가하고 만든 다양한 페이지를 확인해보세요.