ここではユーザが自身のProfileを確認できるようにしよう.
routes/web.php (抜粋)
Route::get('/', function () {
    return view('welcome');
});
Route::get('/auth/verifyemail/{token}', 'Auth\RegisterController@verify');
Auth::routes();
Route::get('/home', 'HomeController@index')->name('home');
Route::get('/users/{id}', 'UsersController@show');
artisan コマンドでコントローラを作成する.この作業で app/Http/Controllers/UsersController.php が生成される.
[GakuinHana@rin06 laravelUser]$ php artisan make:controller UsersController ⏎ Controller created successfully. [GakuinHana@rin06 laravelUser]$
生成されたファイルを編集し,show 関数を作る.
app/Http/Controllers/UsersController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class UsersController extends Controller
{
  public function show($id)
  {
    dd($id);
  }
}
Webサーバを再起動し,ログアウトした状態で /users/1 や /users/2 にアクセスしてみる.ログインすることなく接続できてしまう.UsersController のすべてのアクションに対して認証を要求するために,次のような関数を追加する.
app/Http/Controllers/UsersController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class UsersController extends Controller
{
  public function __construct()
  {
    // コントローラの全アクションに対して認証を要求する
    $this->middleware('auth');
  }
  public function show($id)
  {
    dd($id);
  }
}
上の関数を追加することで,/users/1 などを指定するとログイン画面に転送されるようになった.
認証ができたので,自分の Profile を取得しよう.
app/Http/Controllers/UsersController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\User;
class UsersController extends Controller
{
  public function __construct()
  {
    // コントローラの全アクションに対して認証を要求する
    $this->middleware('auth');
  }
  public function show($id)
  {
    $user = User::find($id);
    dd($user);
  }
}
/users/1 や /users/2 を表示してみよう.ユーザ情報を取得できている.
 
/users/1 や /users/2 を表示してみよう.ユーザ情報を取得できている.ただし,他人の情報まで表示できてしまうのは問題である.自分の情報だけを表示できるようにしよう.
app/Http/Controllers/UsersController.php (抜粋)
  public function show($id)
  {
    if (\Auth::user()->id != $id){
      // ログインしているユーザidと表示しようとしている$idが異なる
      return redirect('/home');
    }
    $user = User::find($id);
    dd($user);
}
上の編集の結果,他人のページを表示しようとしたときには /home へ強制的にリダイレクトされ,自分のProfileだけが表示できるようになった.
コントローラを修正して,ビューにユーザ情報を渡すようにする.
app/Http/Controllers/UsersController.php (抜粋)
  public function show($id)
  {
    if (\Auth::user()->id != $id){
      // ログインしているユーザidと表示しようとしている$idが異なる
      return redirect('/home');
    }
    $user = User::find($id);
    return view('users.show')
        ->with('user', $user);
}
resources/views/users フォルダを作成し,この中に show.blade.php を作成する.このファイルに次のような内容を記述する.なお,resources/views/home.blade.php をコピーして一部変更するだけで良い.
resources/views/users/show.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">Profile</div>
                <div class="panel-body">
                    @if (session('status'))
                        <div class="alert alert-success">
                            {{ session('status') }}
                        </div>
                    @endif
                    <dl>
                      <dt>id</dt>
                      <dd>{{ $user->id }}</dd>
                      <dt>name</dt>
                      <dd>{{ $user->name }}</dd>
                      <dt>email</dt>
                      <dd>{{ $user->email }}</dd>
                      <dt>login_id</dt>
                      <dd>{{ $user->login_id }}</dd>
                      <dt>created_at</dt>
                      <dd>{{ $user->created_at }}</dd>
                    </dl>
                </div>
            </div>
        </div>
    </div>
</div>
@endsection
これで /users/1 から自分の情報を表示できるようになった.
 
/home から自分のprofileページへのリンクを設置する.
resources/views/layouts/app.blade.php (抜粋)
  <li class="dropdown">
    <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">
        {{ Auth::user()->name }} <span class="caret"></span>
    </a>
    <ul class="dropdown-menu" role="menu">
        <li>
            <a href="{{ route('logout') }}"
                onclick="event.preventDefault();
                         document.getElementById('logout-form').submit();">
                Logout
            </a>
            <form id="logout-form" action="{{ route('logout') }}" method="POST" style="display: none;">
                {{ csrf_field() }}
            </form>
        </li>
        <li>
          <a href="{{ action('UsersController@show', Auth::user()->id) }}">
            Profile
          </a>
        </li>
    </ul>
</li>
これで各ユーザの /home からProfileへリンクできるようになった.
