Laravel5 튜토리얼 블로그 돌아가기 (2) 블로그 기사 투고 양식 만들기

12474 단어 PHP라라벨laravel5
전회까지로, DB·테이블의 설정을 할 수 있었으므로, 이번은 관리 화면측의 블로그 기사를 투고하는 폼을 만들어 갑니다. 우선, 보존 처리 등은 생각하지 않고, 간단하게 View 템플릿을 읽어 표시하는 것만의 처리를 구현해 갑니다.

라우팅 설정


routes/web.php 를 열고 아래와 같이 라우팅을 추가합니다.

routes/web.php
// http://{ホスト名}/admin/form に GET でアクセスすると、AdminBlogController の form メソッドを実行するという意味
// name メソッドでエイリアスをつけることができる
Route::get('admin/form', 'AdminBlogController@form')->name('admin_form');

post로 액세스하고 싶은 경우는 Route::post()를, PUT로 액세스하고 싶은 경우는 Route::put()를 지정합니다.
그 밖에도 여러가지 사용법이 있으므로, 별칭도 포함해 쫓아 소개해 갑니다. 신경이 쓰이는 분은 문서 를 참조해 주세요.

컨트롤러 작성



그런 다음 컨트롤러를 만듭니다. 관리 화면 측의 처리가 되므로 AdminBlogController 라는 이름의 컨트롤러 클래스를 만듭니다. 컨트롤러 클래스는 다음 artisan 명령으로 작성할 수 있습니다.
php artisan make:controller AdminBlogController

명령을 실행하면 app/Http/Controllers/AdminBlogController.php 라는 파일이 되어 있다고 생각하므로, 그것을 열고 아래와 같이 편집합니다. 지정한 View 템플릿을 표시하는 것만의 처리입니다.

app/Http/Controllers/AdminBlogController.php
<?php

namespace App\Http\Controllers;

class AdminBlogController extends Controller
{
    /**
     * ブログ記事入力フォーム
     *
     * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
     */
    public function form()
    {
        // resources/views 配下にある、どのテンプレートを使うか指定。ディレクトリの階層はピリオドで表現できる
        // この例では resources/views/admin_blog/form.blade.php が読み込まれる
        return view('admin_blog.form');
    }
}

View 템플릿 만들기



이제 로드할 템플릿 resources/views/admin_blog/form.blade.php를 만듭니다. Laravel은 Blade라는 템플릿을 사용합니다.
뷰 템플리트는 artisan 명령으로 작성할 수 없으므로 디렉토리를 포함하여 자체적으로 작성하십시오. Blade 템플릿에는 .blade.php라는 확장자가 있습니다. 익숙해질 때까지 파일 이름에 유의하십시오.

이번에는, 우선 아래와 같이, 극히 간소한 블로그 투고 폼을 준비합니다.

resources/views/admin_blog/form.blade.php
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>ブログ記事投稿フォーム</title>
</head>

<body>
<h2>ブログ記事投稿・編集</h2>

<form method="POST">
    日付<br>
    <input name="post_date" size="20" value="" placeholder="日付を入力して下さい。"><br><br>

    タイトル<br>
    <input name="title" value="" placeholder="タイトルを入力して下さい。"><br><br>

    本文<br>
    <textarea cols="50" rows="15" name="body" placeholder="本文を入力してください。"></textarea><br>

    <input type="submit" value="送信">
    {{--CSRFトークンが生成される--}}
    {{ csrf_field() }}
</form>

</body>
</html>

여기서는 폼 파트의 이름이 articles 테이블의 열 이름과 동일하다는 점에 유의하십시오. 이것이 나중에 효과가 있습니다.
CSRF용 토큰을 자동으로 생성해 준다 {{ csrf_field() }}를 잊지 않고 써 둡시다. 이 토큰은 GET 메소드 이외로 송신하는 경우는 필수로, 이것이 없으면 Exception 를 토해 버립니다.
지금까지 가능하면 http://{ホスト名}/admin/form로 이동하여 양식이 표시되는지 확인하십시오.

단, 이대로라면, 외형이 조금 좋지 않기 때문에, bootstrap 과 CSS 를 사용해, 조금 보기 좋게 해 둡니다.

resources/views/admin_blog/form.blade.php
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>ブログ記事投稿フォーム</title>
    {{--asset ヘルパー関数を使うと public/ 配下ファイルへのURLを生成してくれる--}}
    {{--bootstrap.min.css は最初からインストールされている--}}
    <link rel="stylesheet" href="{{ asset('/css/bootstrap.min.css') }}">
    <link rel="stylesheet" href="{{ asset('/css/blog.css') }}">
</head>

<body>

<div class="container">
    <div class="row">
        <div class="col-md-8 col-md-offset-2">
            <h2>ブログ記事投稿・編集</h2>

            <form method="POST">
                <div class="form-group">
                    <label>日付</label>
                    <input class="form-control" name="post_date" size="20" value="" placeholder="日付を入力して下さい。">
                </div>

                <div class="form-group">
                    <label>タイトル</label>
                    <input class="form-control" name="title" value="" placeholder="タイトルを入力して下さい。">
                </div>

                <div class="form-group">
                    <label>本文</label>
                    <textarea class="form-control" rows="15" name="body" placeholder="本文を入力してください。"></textarea>
                </div>

                <input type="submit" class="btn btn-primary btn-sm" value="送信">
                {{--CSRFトークンが生成される--}}
                {{ csrf_field() }}
            </form>
        </div>
    </div>
</div>

</body>
</html>

public/css/blog.css
body {
    font-size: 12px;
    color: #696969;
}
h2 {
    font-size: 24px;
    border-bottom: 1px solid #1e90ff;
    padding: 5px 0 5px 0;
    margin-bottom: 25px;
}
.form-group input[name="post_date"] {
    width: 200px;
}

이제 아래와 같은 외형이 됩니다.



다음 번에는 블로그 기사의 보존 처리를 구현하겠습니다.

참고 자료



Laravel 한국어 문서


  • 라우팅
  • 컨트롤러
  • Blade 템플릿

  • 프로그램 소스(github)


  • github yumgoo17/like_blog
  • 좋은 웹페이지 즐겨찾기