はじめに

Cloud9を使ってLaravel5.4で開発第6回です。
 
今回の内容にはログイン機能の作成が含まれています。
 
非常に簡単にできてしまうのでぜひ実際に作ってみてください。
 
前回までの記事 
Cloud9を使ってLaravel5.4で開発【第1回】
Cloud9を使ってLaravel5.4で開発【第2回】
Cloud9を使ってLaravel5.4で開発【第3回】
Cloud9を使ってLaravel5.4で開発【第4回】
Cloud9を使ってLaravel5.4で開発【第5回】
 
 

3-3.リソースコントローラーを生成する

リソースコントローラを生成。

$ php artisan make:controller PostsController

次に routes/web.php に以下の記述を追加する。

Route::resource('bbs', 'PostsController');

3-4.一覧表示機能を作る

コントローラー

app/Http/Controllers/PostsController.phpを編集する。

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Post;

class PostsController extends Controller
{
    public function index()
    {
        $posts = Post::all();

        return view('bbs.index')->with('posts', $posts);
    }
}

ビュー

resource/view/bbs/index.blade.phpを新規作成。

@extends('layouts.default')

@section('content')

    <div class="col-xs-8 col-xs-offset-2">

        <!-- 新規投稿ボタン -->
        <div class="row">
            <div class="col-sm-12">
                <a href="/bbs/create" class="btn btn-primary" style="margin:20px;">新規投稿</a>
            </div>
        </div>

        <!-- 投稿一覧表示 -->
        @foreach($posts as $key => $post)

            <h2>タイトル:{{ $post->title }}
                <small>投稿日:{{ date("Y年 m月 d日",strtotime($post->created_at)) }}</small>
            </h2>
      <p>投稿者:
          @if($post->User)
              {{ $post->User->name }}
          @endif
      </p>
            <p>カテゴリー:
          @if($post->Category)
                {{ $post->Category->name }}
            @endif
      </p>
            <p>{{ $post->content }}</p>
            <p><a href="/bbs/{{ $post->id }}" class="btn btn-primary">続きを読む</a></p>
            <p>コメント数:{{ count($post->Comments) }}</p>
            <hr />
        @endforeach

        </div>

@endsection

$post->User->name に関して

Post.php モデルで先ほど作った User() メソッドからカテゴリー名をリレーションして取得している。

$post->Category->name も同様。
 
hogehoge.com/bbs を開いてみて、以下のようになっていればOK。

Bf3eabd3 3ac4 4f28 b8ab d0c642c6c8d4

3-5.<続きを読む>機能を作る

コントローラー

app/Http/Controllers/PostController に以下を追加。

    public function show($id)
    {
        $post = Post::find($id);
        return view('bbs.show')->with('post', $post);
    }

ビュー

resources/view/bbs/show.blade.php を新規作成。

@extends('layouts.default')

@section('content')

    <div class="col-xs-8 col-xs-offset-2">

        <!-- 一覧に戻るボタン -->
        <div class="row">
            <div class="col-sm-12">
                <a href="/bbs" class="btn btn-primary" style="margin:20px;">一覧に戻る</a>
            </div>
        </div>

        <!-- 投稿内容表示 -->
        <h2>タイトル:{{ $post->title }}
            <small>投稿日:{{ date("Y年 m月 d日", strtotime($post->created_at)) }}</small>
        </h2>
        <p>投稿者:
            @if($post->User)
                {{ $post->User->name }}
            @endif
        </p>
        <p>カテゴリー:
            @if($post->Category)
                {{ $post->Category->name }}
            @endif
        </p>
        <p>{{ $post->content }}</p>

        <hr>

        <!-- コメント表示 -->
        <h3>コメント一覧</h3>
        @forelse($post->Comments as $comment)
            <h4>
                @if($comment)
                    {{ $comment->User->name }}
                @endif
            </h4>
            <p>{{ $comment->comment }}</p><br>
        @empty
            <p>まだコメントがありません。</p>
        @endforelse

    </div>

@endsection

以下の表示ができればOK。

0d2502cb 4a45 4bc0 b8a3 b02d97c93dce

3-6.ログイン機能の作成

ログインしているユーザーと投稿の紐付をしたいため、新規投稿機能を作る前にログイン機能を作る。

認証に関してのコントローラーは、app/Http/Controllers/Auth の中にすでにあるため、実装は早い。

まずは以下のArtisanコマンドを打つ。

$ php artisan make:auth

で以下が生成される
- resources/views/auth/passwords/email.blade.php
- resources/views/auth/passwords/reset.blade.php
- resources/views/auth/login.blade.php
- resources/views/auth/register.blade.php
- resources/views/auth/layouts/app.blade.php
- resources/views/home.blade.php

また、route/web.php に、

Auth::routes();

Route::get('/home', 'HomeController@index')->name('home');

が追記される。

機能としては、
- ログイン機能
- ユーザー登録機能
- パスワード再設定機能(今回は触れない)

がすぐに使えるようになっている。
 
認証機能自体は、users テーブルと紐づいており、users テーブルはもう作ってあるので、あとは細かい修正だけ行えば認証機能は完成してしまう。

routes/web.php を以下に編集。

<?php

Auth::routes();

Route::get('/', 'HomeController@index')->name('home');

Route::group(['middleware' => 'auth'], function() {

    Route::resource('users', 'UsersController');

    Route::resource('bbs', 'PostsController');

    Route::get('/home', 'HomeController@index')->name('home');

});

Route::get('/',function ()... の部分は削除し、

Route::get('/','HomeController@index')->name('home'); に変更。

Route::group(['middleware' => 'auth'], function() {
      //
  })

の中へルーティングを記述することでその中のルーティングは Auth を通る。

resources/views/home.blade.php を編集。

@extends('layouts.app')

@section('content')
<div class="container">
    <div class="row">
        <div class="col-md-8 col-md-offset-2">
            <div class="panel panel-default">
                <div class="panel-heading">Dashboard</div>

                <div class="panel-body">
                    You are logged in!
                </div>
            </div>
            <div class="panel panel-default">
                <div class="panel-heading">
                    <h3 class="panel-title">menu</h3>
                </div>
                <div class="panel-body panel-info">
                    <a href="/users">ユーザ一覧</a>
                </div>
                <div class="panel-body panel-info">
                    <a href="/bbs">掲示板</a>
                </div>
            </div>
        </div>
    </div>
</div>
@endsection

これでログイン機能が実装できた。

なお右上の[Register]から新規登録ができる。

Bdef54d5 6e33 49ea a9d8 21fc836c2035

こんな画面

ログインすると

A27ad8b7 8af2 4f43 95a7 aaae025d0d10

こんな画面。
 
ログイン機能ができたので、次回からは掲示板の続きを作って行きますよー。

Shere
  • はてなブログ
  • Twitter
  • Facebook
Cloud9を使ってLaravel5.4で開発【第6回】

Writer

  • Name

  • Position

    自然を愛する現代っ子

  • Profile

    文章を書くのは苦手です。小学校の読書感想文は毎年「五体不満足」でした。毎年同じのを出してました。そのくらい苦手です。でもブログ書きます。読んで下さい。