├── .env.example ├── .gitattributes ├── .gitignore ├── app ├── Console │ ├── Commands │ │ └── Inspire.php │ └── Kernel.php ├── Events │ ├── Event.php │ └── UserRegistered.php ├── Exceptions │ └── Handler.php ├── Http │ ├── Controllers │ │ ├── Auth │ │ │ ├── AuthController.php │ │ │ └── PasswordController.php │ │ ├── Controller.php │ │ ├── HomeController.php │ │ └── UserController.php │ ├── Kernel.php │ ├── Middleware │ │ ├── Authenticate.php │ │ ├── EncryptCookies.php │ │ ├── FirstUser.php │ │ ├── RedirectIfAuthenticated.php │ │ └── VerifyCsrfToken.php │ ├── Requests │ │ └── Request.php │ └── routes.php ├── Jobs │ └── Job.php ├── Listeners │ ├── .gitkeep │ └── MailConfirmer.php ├── Policies │ └── .gitkeep ├── Providers │ ├── AppServiceProvider.php │ ├── AuthServiceProvider.php │ ├── EventServiceProvider.php │ └── RouteServiceProvider.php └── User.php ├── artisan ├── bootstrap ├── app.php ├── autoload.php └── cache │ └── .gitignore ├── composer.json ├── composer.lock ├── config ├── app.php ├── auth.php ├── broadcasting.php ├── cache.php ├── compile.php ├── database.php ├── filesystems.php ├── mail.php ├── queue.php ├── services.php ├── session.php └── view.php ├── database ├── .gitignore ├── factories │ └── ModelFactory.php ├── migrations │ ├── .gitkeep │ ├── 2014_10_12_000000_create_users_table.php │ └── 2014_10_12_100000_create_password_resets_table.php └── seeds │ ├── .gitkeep │ ├── DatabaseSeeder.php │ └── Make50User.php ├── gulpfile.js ├── package.json ├── phpspec.yml ├── phpunit.xml ├── public ├── .htaccess ├── favicon.ico ├── index.php └── robots.txt ├── readme-laravel.md ├── readme.md ├── resources ├── assets │ └── sass │ │ └── app.scss ├── lang │ ├── en │ │ ├── auth.php │ │ ├── pagination.php │ │ ├── passwords.php │ │ └── validation.php │ └── ja │ │ ├── auth.php │ │ ├── pagination.php │ │ ├── passwords.php │ │ └── validation.php └── views │ ├── auth │ ├── login.blade.php │ ├── password.blade.php │ ├── register.blade.php │ └── reset.blade.php │ ├── emails │ ├── password.blade.php │ └── register.blade.php │ ├── errors │ ├── 401.blade.php │ ├── 403.blade.php │ ├── 404.blade.php │ ├── 500.blade.php │ └── 503.blade.php │ ├── front.blade.php │ ├── layout.blade.php │ ├── user-only.blade.php │ ├── user │ ├── edit.blade.php │ └── index.blade.php │ ├── vendor │ └── .gitkeep │ └── welcome.blade.php ├── server.php ├── storage ├── app │ └── .gitignore ├── framework │ ├── .gitignore │ ├── cache │ │ └── .gitignore │ ├── sessions │ │ └── .gitignore │ └── views │ │ └── .gitignore └── logs │ └── .gitignore └── tests ├── ExampleTest.php └── TestCase.php /.env.example: -------------------------------------------------------------------------------- 1 | APP_ENV=local 2 | APP_DEBUG=true 3 | 4 | # アプリケーションキー 5 | # もし内容がSomeRandomStringのままであれば、php artisan key:generateをターミナルで実行すること 6 | APP_KEY=SomeRandomString 7 | 8 | # DBセッテング 9 | # ドライバーを指定するDB_CONNECTIONを追加 10 | DB_CONNECTION=sqlite 11 | DB_HOST=localhost 12 | DB_DATABASE=homestead 13 | DB_USERNAME=homestead 14 | DB_PASSWORD=secret 15 | 16 | CACHE_DRIVER=file 17 | SESSION_DRIVER=file 18 | QUEUE_DRIVER=sync 19 | 20 | # メールドライバーをlogに変更 21 | MAIL_DRIVER=log 22 | MAIL_HOST=mailtrap.io 23 | MAIL_PORT=2525 24 | MAIL_USERNAME=null 25 | MAIL_PASSWORD=null 26 | MAIL_ENCRYPTION=null 27 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto 2 | *.css linguist-vendored 3 | *.less linguist-vendored 4 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /vendor 2 | /node_modules 3 | Homestead.yaml 4 | Homestead.json 5 | .env 6 | /nbproject 7 | .directory 8 | .php_cs 9 | /storage/database.sqlite 10 | -------------------------------------------------------------------------------- /app/Console/Commands/Inspire.php: -------------------------------------------------------------------------------- 1 | comment(PHP_EOL.Inspiring::quote().PHP_EOL); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /app/Console/Kernel.php: -------------------------------------------------------------------------------- 1 | command('inspire') 27 | ->hourly(); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /app/Events/Event.php: -------------------------------------------------------------------------------- 1 | user = $user; 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /app/Exceptions/Handler.php: -------------------------------------------------------------------------------- 1 | getMessage(), $e); 77 | } 78 | 79 | return parent::render($request, $e); 80 | } 81 | } 82 | -------------------------------------------------------------------------------- /app/Http/Controllers/Auth/AuthController.php: -------------------------------------------------------------------------------- 1 | middleware('guest', ['except' => 'getLogout']); 32 | } 33 | 34 | /** 35 | * やって来た登録リクエストに対するバリデターを取得 36 | * 37 | * @param array $data 38 | * 39 | * @return \Illuminate\Contracts\Validation\Validator 40 | */ 41 | protected function validator(array $data) 42 | { 43 | return Validator::make($data, 44 | [ 45 | 'name' => 'required|max:255', 46 | 'email' => 'required|email|max:255|unique:users', 47 | 'password' => 'required|confirmed|min:6', 48 | ]); 49 | } 50 | 51 | /** 52 | * 登録内容を確認後、新しいユーザーインスタンスを生成 53 | * 54 | * @param array $data 55 | * 56 | * @return User 57 | */ 58 | protected function create(array $data) 59 | { 60 | $user = User::create([ 61 | 'name' => $data['name'], 62 | 'email' => $data['email'], 63 | 'password' => bcrypt($data['password']), 64 | ]); 65 | 66 | // ユーザー生成イベント発行 67 | // イベントを受け取るリスナーを登録することで 68 | // ユーザー追加時に関わる機能の拡張は 69 | // このメソッドを直接変更せずにリスナーで簡単に 70 | // できるようになる。イベントと処理するリスナーは 71 | // App\Providers\EventServiceProviderに登録する。 72 | event(new UserRegistered($user)); 73 | 74 | return $user; 75 | } 76 | } 77 | -------------------------------------------------------------------------------- /app/Http/Controllers/Auth/PasswordController.php: -------------------------------------------------------------------------------- 1 | middleware('guest'); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /app/Http/Controllers/Controller.php: -------------------------------------------------------------------------------- 1 | middleware('auth.first'); 32 | } 33 | 34 | /** 35 | * ユーザー一覧表示 36 | * 37 | * URI : GET /user 38 | * 39 | * URIが/userだけで、アクションメソッドが指示されない場合、 40 | * HTTP動詞+Indexのアクションメソッドが実行される。 41 | * 42 | * @return Response 43 | */ 44 | public function getIndex() { 45 | // 5レコードずつページネーション(ページ付け)するように取得 46 | $users = User::paginate(5); 47 | 48 | // 取得したページネーション情報付きのユーザーを渡し、 49 | // ビューディレクトリーの'user/index.blade.php'ファイルの 50 | // レンダー結果を内容としたResponseを返す。 51 | // この場合の「レンダー」とはビューの内容をHTMLへ変換すること。 52 | // 53 | // ビューのwithメソッドはビューに情報を渡す。この場合、 54 | // ビューの中で第1引数で渡された変数名で、第2引数の$usersが 55 | // 参照できる。 56 | return view('user.index')->with('users', $users); 57 | } 58 | 59 | /** 60 | * ユーザー削除 61 | * 62 | * URI : GET /user/remove/ユーザーID 63 | * 64 | * 指定されたユーザーを削除する。 65 | * 66 | * @param int $userId 67 | * @return RedirectResponse 68 | */ 69 | public function getRemove($userId) { 70 | // ユーザーを取得する。指定されたユーザーが存在しない場合 71 | // ModelNotFoundException例外が発生する。この例外は 72 | // App\Exceptions\Handlerで404HTTP例外に変換され、 73 | // 用意してあれば404エラーページが表示される。 74 | $user = User::findOrFail($userId); 75 | 76 | // 取得できた場合は$userにEloquentモデルのインスタンスが 77 | // 入っている。deleteメソッドでそのユーザーのレコードは 78 | // テーブルから削除される。 79 | $user->delete(); 80 | 81 | // 削除後、適当な場所へリダイレクトする。 82 | // リダイレクト先に直前のページをbackメソッドで指定している。 83 | // リダイレクトインスタンスに対するwithメソッドは、 84 | // 渡された情報をフラッシュデータとしてセッションへ保存する。 85 | // 86 | // フラッシュデータとは次のセッションの間だけ有効で、その後 87 | // 自動的に削除される保存データのこと。この例のように 88 | // エラーメッセージを渡したい場合に使用する。 89 | return redirect()->back() 90 | ->with('status', 'ユーザーを削除しました。'); 91 | } 92 | 93 | /** 94 | * ユーザーの登録内容更新フォーム表示 95 | * 96 | * URI : GET /user/edit/ユーザーID 97 | * 98 | * ユーザーの登録内容を修正するフォームを表示 99 | * 100 | * @param int $userId 101 | * @return Response 102 | */ 103 | public function getEdit($userId) { 104 | // EloqunetのfindOr Failメソッドは指定されたユーザーを取得するか、 105 | // 存在しない場合は例外を発生させる。 106 | $user = User::findOrFail($userId); 107 | 108 | // ビューファイルの'user/edit.blade.php'の内容を 109 | // レンダーした結果で、Responseが生成される。 110 | // withUserは動的なメソッド指定によりwithメソッドを 111 | // 呼び出す方法で、with+変数名のメソッド名として指定する。 112 | // この場合はwith('user', $user)と同じ動作をする。 113 | return view('user.edit')->withUser($user); 114 | } 115 | 116 | /** 117 | * ユーザーの登録処理 118 | * 119 | * POST : GET /user/edit/ユーザーID 120 | * 121 | * 内容の編集フォームから送られてきた内容で 122 | * ユーザーを更新する。 123 | * 124 | * @param int $userId 125 | * @return RedirectResponse 126 | */ 127 | public function postEdit(Request $request, $userId) { 128 | // 指定されたユーザーを取得、存在しない場合は 129 | // 例外が発生する。 130 | $user = User::findOrFail($userId); 131 | 132 | // バリデーション実行。validateメソッドにより、指定された 133 | // バリデーションルールに全部合格しない限り、自動的に 134 | // 直前のページにリダイレクトされる。 135 | // その際、エラーメッセージと入力内容はセッションへ 136 | // フラッシュデータとして保存される。 137 | $this->validate($request, [ 138 | 'name' => 'required|max:255', 139 | // 更新時、ユーザー自身のメールアドレスとの重複は許す 140 | 'email' => 'required|email|max:255|unique:users,email,'.$user->id, 141 | 'password' => 'min:6', 142 | ]); 143 | 144 | // フォームへの入力内容は、送られてきたRequestに含まれている。 145 | // その中から、ユーザーに関する入力項目のみ配列で取得する。 146 | $inputs = \Request::only(['name', 'email', 'password']); 147 | 148 | // テーブルに保存しているパスワードはハッシュ済みであり、 149 | // 元の値に戻せない。そのためパスワードフィールドは入力専用。 150 | // 指定された場合のみ、入力内容をbcryptヘルパーでハッシュし、 151 | // 未指定の場合は保存されている内容のままにする。 152 | $inputs['password'] = empty($inputs['password']) ? 153 | $user->password : bcrypt($inputs['password']); 154 | 155 | // fillメソッドにより、配列の内容でEloquentモデルの内容を 156 | // 一度に置き換える。インスタンスがもつ項目値を設定するだけで、 157 | // まだデータベースへ保存はされていない。 158 | // テーブルのカラム名と、フォームの入力フィールド名を 159 | // 揃えてあるのがポイント。一々変換せずに一度に代入できる。 160 | // 161 | // Eloquentモデルのチュートリアルでかつて、リクエストの入力値を 162 | // 全て無条件に書き戻すコードが多く紹介されていた。しかし、 163 | // それではセキュリティーリスクを生むことがあるため、まとめて 164 | // 代入できる項目をモデルで制限する仕様となった。 165 | // 今回のname、email、passwordフィルードはUserクラスで指定済み。 166 | $user->fill($inputs); 167 | 168 | // インスタンスの内容でテーブルのレコードを書き換える。 169 | $user->save(); 170 | 171 | // 処理終了後は適当な場所へリダイレクト 172 | // redirectヘルパーは引数にリダイレクト先のURLを受け取る。 173 | // actionヘルパーはコントローラー@アクションメソッドから、 174 | // URLを生成する。 175 | return redirect(action('UserController@getIndex')) 176 | ->with('status', 'ユーザー情報を変更しました。'); 177 | } 178 | 179 | } 180 | -------------------------------------------------------------------------------- /app/Http/Kernel.php: -------------------------------------------------------------------------------- 1 | \App\Http\Middleware\Authenticate::class, 36 | 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 37 | 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, 38 | 39 | // 認証済みで、IDが1のユーザーのみを通過させるカスタムミドルウェア 40 | 'auth.first' => \App\Http\Middleware\FirstUser::class, 41 | ]; 42 | } 43 | -------------------------------------------------------------------------------- /app/Http/Middleware/Authenticate.php: -------------------------------------------------------------------------------- 1 | auth = $auth; 31 | } 32 | 33 | /** 34 | * 送られてきたリクエストの処理 35 | * 36 | * @param \Illuminate\Http\Request $request 37 | * @param \Closure $next 38 | * 39 | * @return mixed 40 | */ 41 | public function handle($request, Closure $next) 42 | { 43 | // guestメソッドは認証されていない場合にtrueになる 44 | if ($this->auth->guest()) { 45 | if ($request->ajax()) { 46 | // AJAXリクエストの場合は、401レスポンスを返す 47 | return response('Unauthorized.', 401); 48 | } else { 49 | // AJAXではない通常のアクセスでは、リダイレクトの 50 | // guestメソッドで引数で指定したURIにリダイレクトさせる。 51 | // ログイン後、認証が必要となったURIへ自動的にリダイレクトされる。 52 | return redirect()->guest('auth/login'); 53 | } 54 | } 55 | 56 | return $next($request); 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /app/Http/Middleware/EncryptCookies.php: -------------------------------------------------------------------------------- 1 | guest('auth/login'); 30 | } 31 | 32 | // ユーザーIDのチェック 33 | if (Auth::user()->id != 1) { 34 | // abortヘルパーは指定されたステータスコードの 35 | // Symfony\Component\HttpKernel\Exception\HttpException 36 | // 例外を発生させる。 37 | // このHttpException例外はIlluminate\Foundation\Exceptions\Handler 38 | // クラスにより、'error.ステータスコード'のビューが存在すれば 39 | // レンダーされ、レスポンスとして返される。 40 | // 第2引数にメッセージも渡せ、エラー表示ビュー中で 41 | // $exception->messageとしてアクセスできる。 42 | abort(401, 'このページヘアクセスする権限がありません。'); 43 | } 44 | 45 | // ユーザーIDが1でログイン済みであれば次の処理へ。 46 | return $next($request); 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /app/Http/Middleware/RedirectIfAuthenticated.php: -------------------------------------------------------------------------------- 1 | auth = $auth; 28 | } 29 | 30 | /** 31 | * 送られてきたリクエストの処理 32 | * 33 | * @param \Illuminate\Http\Request $request 34 | * @param \Closure $next 35 | * 36 | * @return mixed 37 | */ 38 | public function handle($request, Closure $next) 39 | { 40 | // checkメソッドはログイン時にtrueとなる 41 | if ($this->auth->check()) { 42 | return redirect('/home'); 43 | } 44 | 45 | return $next($request); 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /app/Http/Middleware/VerifyCsrfToken.php: -------------------------------------------------------------------------------- 1 | middleware(['auth']); 57 | Route::get('home', ['middleware' => 'auth', 'uses' => 'HomeController@home']); 58 | 59 | // 60 | // 以下のURIを定義 61 | // 62 | // GET /user ユーザー一覧表示 63 | // GET /user/edit/ユーザーID ユーザー更新フォーム表示 64 | // POST /user/edit/ユーザーID ユーザー更新処理 65 | // GET /user/remove/ユーザーID ユーザー削除 66 | // 67 | // controllerメソッドはURIの先頭とコントローラーを結びつける。どのルートと結び付けるのか 68 | // コントローラーを確認する必要がある。 69 | // 70 | // 暗黙のコントローラー参照 : 71 | // 本文 : P.061 72 | // ドキュメント : http://readouble.com/laravel/5/1/ja/controllers.html#implicit-controllers 73 | // 74 | // コントローラーで指定しているミドルウェアにより、 75 | // idが'1'のユーザー(最初の登録ユーザー)のみアクセス可能。 76 | // 77 | Route::controller('user', 'UserController'); 78 | 79 | // 80 | // 以下のURIを定義 81 | // 82 | // GET /auth/register ユーザー登録フォーム表示(ユーザー追加) 83 | // POST /auth/register ユーザー登録処理 84 | // GET /auth/login ユーザー認証(ログイン)フォーム表示 85 | // POST /auth/login ユーザー認証処理 86 | // GET /auth/logout ログアウト 87 | // GET /password/email パスワードリセットメール依頼フォーム表示 88 | // POST /password/email パスワードリセットメール処理 89 | // GET /password/reset/トークン パスワードリセットフォーム表示 90 | // POST /password/reset パスワードリセット 91 | // 92 | Route::controllers([ 93 | 'auth' => 'Auth\AuthController', 94 | 'password' => 'Auth\PasswordController', 95 | ]); 96 | 97 | // 98 | // ※注意 99 | // 100 | // Laravel5.2より上記controllerメソッドとcontrollersメソッドの両方共、 101 | // 非推奨となった。今後はRoute::を使用し、個別に定義する必要がある。 102 | // 103 | // 個別のルート定義 : 104 | // http://readouble.com/laravel/5/1/ja/authentication.html#included-routing 105 | // http://readouble.com/laravel/5/1/ja/authentication.html#resetting-routing 106 | // 107 | -------------------------------------------------------------------------------- /app/Jobs/Job.php: -------------------------------------------------------------------------------- 1 | mailer = $mailer; 31 | } 32 | 33 | /** 34 | * ユーザー登録イベントの処理 35 | * 36 | * ユーザー登録を知らせるメールを送信する。 37 | * 38 | * @param UserRegistered $event 39 | */ 40 | public function handle(UserRegistered $event) 41 | { 42 | // App\Userのインスタンスを取得 43 | $user = $event->user; 44 | 45 | // 登録済み通知メール送信 46 | $this->mailer->send('emails.register', 47 | ['name' => $user->name], 48 | function ($mail) use ($user) { 49 | $mail->to($user->email, $user->name) 50 | ->subject('ユーザー登録のお知らせ'); 51 | }); 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /app/Policies/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/laravel-jp-reference/chapter2/57ec1b2c84de2bf1c1c0715971c457f2b421edc7/app/Policies/.gitkeep -------------------------------------------------------------------------------- /app/Providers/AppServiceProvider.php: -------------------------------------------------------------------------------- 1 | 'App\Policies\ModelPolicy', 28 | ]; 29 | 30 | /** 31 | * アプリケーションの認証と認可サービスの登録 32 | * 33 | * @param \Illuminate\Contracts\Auth\Access\Gate $gate 34 | */ 35 | public function boot(GateContract $gate) 36 | { 37 | parent::registerPolicies($gate); 38 | 39 | // 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /app/Providers/EventServiceProvider.php: -------------------------------------------------------------------------------- 1 | [ 27 | MailConfirmer::class, 28 | ], 29 | ]; 30 | 31 | /** 32 | * アプリケーションのその他のイベントの登録 33 | * 34 | * @param \Illuminate\Contracts\Events\Dispatcher $events 35 | */ 36 | public function boot(DispatcherContract $events) 37 | { 38 | parent::boot($events); 39 | 40 | // 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /app/Providers/RouteServiceProvider.php: -------------------------------------------------------------------------------- 1 | group(['namespace' => $this->namespace], function ($router) { 48 | require app_path('Http/routes.php'); 49 | }); 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /app/User.php: -------------------------------------------------------------------------------- 1 | make(Illuminate\Contracts\Console\Kernel::class); 32 | 33 | $status = $kernel->handle( 34 | $input = new Symfony\Component\Console\Input\ArgvInput, 35 | new Symfony\Component\Console\Output\ConsoleOutput 36 | ); 37 | 38 | /* 39 | |-------------------------------------------------------------------------- 40 | | アプリケーションのシャットダウン 41 | |-------------------------------------------------------------------------- 42 | | 43 | | Artisanは一度実行終了しました。シャットダウンの手順を進める前に 44 | | 後片付けをしてもらうため、シャットダウンイベントを発行します。 45 | | これはリクエストの一番最後に実行されます。 46 | | 47 | */ 48 | 49 | $kernel->terminate($input, $status); 50 | 51 | exit($status); 52 | -------------------------------------------------------------------------------- /bootstrap/app.php: -------------------------------------------------------------------------------- 1 | singleton( 30 | Illuminate\Contracts\Http\Kernel::class, 31 | App\Http\Kernel::class 32 | ); 33 | 34 | $app->singleton( 35 | Illuminate\Contracts\Console\Kernel::class, 36 | App\Console\Kernel::class 37 | ); 38 | 39 | $app->singleton( 40 | Illuminate\Contracts\Debug\ExceptionHandler::class, 41 | App\Exceptions\Handler::class 42 | ); 43 | 44 | /* 45 | |-------------------------------------------------------------------------- 46 | | アプリケーションを返す 47 | |-------------------------------------------------------------------------- 48 | | 49 | | このスクリプトはアプリケーションインスタンスを返します。インスタンスは、 50 | | 実際のアプリケーションの実行とレスポンス送信から、インスタンスの 51 | | 構築を分離できるように、呼び出し元のスクリプトへ与えられます。 52 | | 53 | */ 54 | 55 | return $app; 56 | -------------------------------------------------------------------------------- /bootstrap/autoload.php: -------------------------------------------------------------------------------- 1 | =5.5.9", 9 | "laravel/framework": "5.1.*" 10 | }, 11 | "require-dev": { 12 | "fzaninotto/faker": "~1.4", 13 | "mockery/mockery": "0.9.*", 14 | "phpunit/phpunit": "~4.0", 15 | "phpspec/phpspec": "~2.1" 16 | }, 17 | "autoload": { 18 | "classmap": [ 19 | "database" 20 | ], 21 | "psr-4": { 22 | "App\\": "app/" 23 | } 24 | }, 25 | "autoload-dev": { 26 | "classmap": [ 27 | "tests/TestCase.php" 28 | ] 29 | }, 30 | "scripts": { 31 | "post-install-cmd": [ 32 | "php artisan clear-compiled", 33 | "php artisan optimize" 34 | ], 35 | "pre-update-cmd": [ 36 | "php artisan clear-compiled" 37 | ], 38 | "post-update-cmd": [ 39 | "php artisan optimize" 40 | ], 41 | "post-root-package-install": [ 42 | "php -r \"copy('.env.example', '.env');\"" 43 | ], 44 | "post-create-project-cmd": [ 45 | "php artisan key:generate" 46 | ] 47 | }, 48 | "config": { 49 | "preferred-install": "dist" 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /config/app.php: -------------------------------------------------------------------------------- 1 | env('APP_DEBUG', false), 17 | 18 | /* 19 | |-------------------------------------------------------------------------- 20 | | アプリケーションURL 21 | |-------------------------------------------------------------------------- 22 | | 23 | | このURLはArtisanコマンドラインツールを使用する時に正しい 24 | | URLを生成するために使用します。アプリケーションのルートのURLを設定してください。 25 | | Artisanコマンドを実行する時に使用されます。 26 | | 27 | */ 28 | 29 | 'url' => 'http://localhost', 30 | 31 | /* 32 | |-------------------------------------------------------------------------- 33 | | アプリケーションタイムゾーン 34 | |-------------------------------------------------------------------------- 35 | | 36 | | ここではアプリケーションのデフォルトタイムゾーンを指定します。これは 37 | | PHPの日付/時間関数で使用されます。最初から未設定でも使用できるように 38 | | 適切なデフォルトを設定してあります。 39 | | 40 | */ 41 | 42 | 'timezone' => 'Asia/Tokyo', // 変更 43 | 44 | /* 45 | |-------------------------------------------------------------------------- 46 | | アプリケーションローカル設定 47 | |-------------------------------------------------------------------------- 48 | | 49 | | アプリケーションローカルは翻訳サービスプロバイダーにより使用される 50 | | デフォルトローカルを指定します。アプリケーションで提供するローカルを 51 | | 自由に設定してください。 52 | | 53 | */ 54 | 55 | 'locale' => 'ja', // 変更 56 | 57 | /* 58 | |-------------------------------------------------------------------------- 59 | | アプリケーションフォールバック言語 60 | |-------------------------------------------------------------------------- 61 | | 62 | | フォールバック言語は現在のローカルが使用できない場合に、 63 | | 代替として使われます。アプリケーション全体に対して用意されている 64 | | 言語フォルダーに対応するコードであればどれでも使用可能です。 65 | | 66 | */ 67 | 68 | 'fallback_locale' => 'en', 69 | 70 | /* 71 | |-------------------------------------------------------------------------- 72 | | 暗号化キー 73 | |-------------------------------------------------------------------------- 74 | | 75 | | このキーはIlluminate暗号化サービスで使用されます。ランダムな32文字を 76 | | セットしないと安全ではありません。アプリケーションをデプロイ 77 | | る前に、必ず変更してください。 78 | | 79 | */ 80 | 81 | 'key' => env('APP_KEY', 'SomeRandomString'), 82 | 83 | 'cipher' => 'AES-256-CBC', 84 | 85 | /* 86 | |-------------------------------------------------------------------------- 87 | | ログ設定 88 | |-------------------------------------------------------------------------- 89 | | 90 | | ここではアプリケーションのログ設定を指定します。Laravelは 91 | | 初めから、Monolog PHPログライブラリーを使用しています。これは便利なように、 92 | | 強力でバリエーション豊かなログハンドラー/フォーマッターを提供しています。 93 | | 94 | | 使用可能な設定: "single", "daily", "syslog", "errorlog" 95 | | 96 | */ 97 | 98 | 'log' => 'single', 99 | 100 | /* 101 | |-------------------------------------------------------------------------- 102 | | 自動ロードされるサービスプロバイダー 103 | |-------------------------------------------------------------------------- 104 | | 105 | | ここにリストしたサービスプロバイダーはアプリケーションのリクエストに対し 106 | | 自動的にロードされます。アプリケーションの機能を拡張するため、この配列へ 107 | | 自由に自分のサービスを付け加えてください。 108 | | 109 | */ 110 | 111 | 'providers' => [ 112 | 113 | /* 114 | * Laravelフレームワークサービスプロバイダー 115 | */ 116 | Illuminate\Foundation\Providers\ArtisanServiceProvider::class, 117 | Illuminate\Auth\AuthServiceProvider::class, 118 | Illuminate\Broadcasting\BroadcastServiceProvider::class, 119 | Illuminate\Bus\BusServiceProvider::class, 120 | Illuminate\Cache\CacheServiceProvider::class, 121 | Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class, 122 | Illuminate\Routing\ControllerServiceProvider::class, 123 | Illuminate\Cookie\CookieServiceProvider::class, 124 | Illuminate\Database\DatabaseServiceProvider::class, 125 | Illuminate\Encryption\EncryptionServiceProvider::class, 126 | Illuminate\Filesystem\FilesystemServiceProvider::class, 127 | Illuminate\Foundation\Providers\FoundationServiceProvider::class, 128 | Illuminate\Hashing\HashServiceProvider::class, 129 | Illuminate\Mail\MailServiceProvider::class, 130 | Illuminate\Pagination\PaginationServiceProvider::class, 131 | Illuminate\Pipeline\PipelineServiceProvider::class, 132 | Illuminate\Queue\QueueServiceProvider::class, 133 | Illuminate\Redis\RedisServiceProvider::class, 134 | Illuminate\Auth\Passwords\PasswordResetServiceProvider::class, 135 | Illuminate\Session\SessionServiceProvider::class, 136 | Illuminate\Translation\TranslationServiceProvider::class, 137 | Illuminate\Validation\ValidationServiceProvider::class, 138 | Illuminate\View\ViewServiceProvider::class, 139 | 140 | /* 141 | * アプリケーションサービスプロバイダー 142 | */ 143 | App\Providers\AppServiceProvider::class, 144 | App\Providers\AuthServiceProvider::class, 145 | App\Providers\EventServiceProvider::class, 146 | App\Providers\RouteServiceProvider::class, 147 | 148 | ], 149 | 150 | /* 151 | |-------------------------------------------------------------------------- 152 | | クラスエイリアス 153 | |-------------------------------------------------------------------------- 154 | | 155 | | このクラスエイリアスの配列はこのアプリケーションが開始されると登録されます。 156 | | エイリアスをどんなに好きなだけ自由に登録しても、「遅延」ロードされるので、 157 | | パフォーマンスを妨げることはありません。 158 | | 159 | */ 160 | 161 | 'aliases' => [ 162 | 163 | 'App' => Illuminate\Support\Facades\App::class, 164 | 'Artisan' => Illuminate\Support\Facades\Artisan::class, 165 | 'Auth' => Illuminate\Support\Facades\Auth::class, 166 | 'Blade' => Illuminate\Support\Facades\Blade::class, 167 | 'Bus' => Illuminate\Support\Facades\Bus::class, 168 | 'Cache' => Illuminate\Support\Facades\Cache::class, 169 | 'Config' => Illuminate\Support\Facades\Config::class, 170 | 'Cookie' => Illuminate\Support\Facades\Cookie::class, 171 | 'Crypt' => Illuminate\Support\Facades\Crypt::class, 172 | 'DB' => Illuminate\Support\Facades\DB::class, 173 | 'Eloquent' => Illuminate\Database\Eloquent\Model::class, 174 | 'Event' => Illuminate\Support\Facades\Event::class, 175 | 'File' => Illuminate\Support\Facades\File::class, 176 | 'Gate' => Illuminate\Support\Facades\Gate::class, 177 | 'Hash' => Illuminate\Support\Facades\Hash::class, 178 | 'Input' => Illuminate\Support\Facades\Input::class, 179 | 'Inspiring' => Illuminate\Foundation\Inspiring::class, 180 | 'Lang' => Illuminate\Support\Facades\Lang::class, 181 | 'Log' => Illuminate\Support\Facades\Log::class, 182 | 'Mail' => Illuminate\Support\Facades\Mail::class, 183 | 'Password' => Illuminate\Support\Facades\Password::class, 184 | 'Queue' => Illuminate\Support\Facades\Queue::class, 185 | 'Redirect' => Illuminate\Support\Facades\Redirect::class, 186 | 'Redis' => Illuminate\Support\Facades\Redis::class, 187 | 'Request' => Illuminate\Support\Facades\Request::class, 188 | 'Response' => Illuminate\Support\Facades\Response::class, 189 | 'Route' => Illuminate\Support\Facades\Route::class, 190 | 'Schema' => Illuminate\Support\Facades\Schema::class, 191 | 'Session' => Illuminate\Support\Facades\Session::class, 192 | 'Storage' => Illuminate\Support\Facades\Storage::class, 193 | 'URL' => Illuminate\Support\Facades\URL::class, 194 | 'Validator' => Illuminate\Support\Facades\Validator::class, 195 | 'View' => Illuminate\Support\Facades\View::class, 196 | 197 | ], 198 | 199 | ]; 200 | -------------------------------------------------------------------------------- /config/auth.php: -------------------------------------------------------------------------------- 1 | 'eloquent', 19 | 20 | /* 21 | |-------------------------------------------------------------------------- 22 | | 認証モデル 23 | |-------------------------------------------------------------------------- 24 | | 25 | | "Eloquent"認証ドライバーを使用する場合、ユーザー情報を取得する 26 | | Eloquentモデルの指定が必要です。もちろん、通常は"User"モデル 27 | | でしょうが、お好きなものをどうぞ。 28 | | 29 | */ 30 | 31 | 'model' => App\User::class, 32 | 33 | /* 34 | |-------------------------------------------------------------------------- 35 | | 認証テーブル 36 | |-------------------------------------------------------------------------- 37 | | 38 | | "Database"認証ドライバーを使用する場合、ユーザーを取得するための 39 | | テーブルを指定する必要があります。基本的な値をデフォルトにしていますが、 40 | | お好きなテーブル名へ簡単に変更できます。 41 | | 42 | */ 43 | 44 | 'table' => 'users', 45 | 46 | /* 47 | |-------------------------------------------------------------------------- 48 | | パスワードリセット設定 49 | |-------------------------------------------------------------------------- 50 | | 51 | | ここではパスワードリマインダーの設定を行います。それにはパスワード 52 | | メールにリセットメールのビューも含まれます。また、リセット 53 | | トークンを保存しておくためのテーブル名も指定可能です。 54 | | 55 | | 有効時間の"expire"に指定する分数は、良く考えてください。 56 | | このトークン保存時間はセキュリティー機能で、短い時間ほど 57 | | 安全になります。ですが、必要に応じ変更可能です。 58 | | 59 | */ 60 | 61 | 'password' => [ 62 | 'email' => 'emails.password', 63 | 'table' => 'password_resets', 64 | 'expire' => 60, 65 | ], 66 | 67 | ]; 68 | -------------------------------------------------------------------------------- /config/broadcasting.php: -------------------------------------------------------------------------------- 1 | env('BROADCAST_DRIVER', 'pusher'), 17 | 18 | /* 19 | |-------------------------------------------------------------------------- 20 | | ブロードキャスト接続 21 | |-------------------------------------------------------------------------- 22 | | 23 | | 他のシステムやWebsocketを利用しブロードキャストイベントを 24 | | 使用する場合の全ブロードキャスト接続をここで定義します。 25 | | 使用可能な接続タイプのサンプルをこの配列の中に用意してあります。 26 | | 27 | */ 28 | 29 | 'connections' => [ 30 | 31 | 'pusher' => [ 32 | 'driver' => 'pusher', 33 | 'key' => env('PUSHER_KEY'), 34 | 'secret' => env('PUSHER_SECRET'), 35 | 'app_id' => env('PUSHER_APP_ID'), 36 | ], 37 | 38 | 'redis' => [ 39 | 'driver' => 'redis', 40 | 'connection' => 'default', 41 | ], 42 | 43 | 'log' => [ 44 | 'driver' => 'log', 45 | ], 46 | 47 | ], 48 | 49 | ]; 50 | -------------------------------------------------------------------------------- /config/cache.php: -------------------------------------------------------------------------------- 1 | env('CACHE_DRIVER', 'file'), 17 | 18 | /* 19 | |-------------------------------------------------------------------------- 20 | | キャッシュ保存場所 21 | |-------------------------------------------------------------------------- 22 | | 23 | | ここでアプリケーションの全キャッシュ「保存場所」を定義し、 24 | | 同時にドライバーを指定します。キャッシュに保存するアイテムのグループ 25 | | タイプに対し、同じキャッシュドライバーを複数定義することもできます。 26 | | 27 | */ 28 | 29 | 'stores' => [ 30 | 31 | 'apc' => [ 32 | 'driver' => 'apc', 33 | ], 34 | 35 | 'array' => [ 36 | 'driver' => 'array', 37 | ], 38 | 39 | 'database' => [ 40 | 'driver' => 'database', 41 | 'table' => 'cache', 42 | 'connection' => null, 43 | ], 44 | 45 | 'file' => [ 46 | 'driver' => 'file', 47 | 'path' => storage_path('framework/cache'), 48 | ], 49 | 50 | 'memcached' => [ 51 | 'driver' => 'memcached', 52 | 'servers' => [ 53 | [ 54 | 'host' => '127.0.0.1', 'port' => 11211, 'weight' => 100, 55 | ], 56 | ], 57 | ], 58 | 59 | 'redis' => [ 60 | 'driver' => 'redis', 61 | 'connection' => 'default', 62 | ], 63 | 64 | ], 65 | 66 | /* 67 | |-------------------------------------------------------------------------- 68 | | キャッシュキープレフィックス 69 | |-------------------------------------------------------------------------- 70 | | 71 | | APCやMemcachedのようなRAMベースでの保存法を使用する場合、 72 | | 他のアプリケーションも使用しているかも知れません。衝突を避けるために 73 | | 全部のキーにプレフィックスをつけた値を指定します。 74 | | 75 | */ 76 | 77 | 'prefix' => 'laravel', 78 | 79 | ]; 80 | -------------------------------------------------------------------------------- /config/compile.php: -------------------------------------------------------------------------------- 1 | [ 17 | // 18 | ], 19 | 20 | /* 21 | |-------------------------------------------------------------------------- 22 | | コンパイル対象のプロバイダーファイル 23 | |-------------------------------------------------------------------------- 24 | | 25 | | ここでは、コンパイルしなくてはならない追加のファイルを返す"compiles" 26 | | functionを定義している、サービスプロバイダーをリストします。 27 | | 使用しているパッケージから、共通ファイルを簡単に指定する手段です。 28 | | 29 | */ 30 | 31 | 'providers' => [ 32 | // 33 | ], 34 | 35 | ]; 36 | -------------------------------------------------------------------------------- /config/database.php: -------------------------------------------------------------------------------- 1 | PDO::FETCH_CLASS, 17 | 18 | /* 19 | |-------------------------------------------------------------------------- 20 | | デフォルトデータベース接続名 21 | |-------------------------------------------------------------------------- 22 | | 23 | | ここでは全てのデータベース動作で用いられるデフォルトデータベース接続を 24 | | 指定することができます。もちろん、データベースライブラリーを使用することで 25 | | 多くの接続を一度に使うことができます。 26 | | 27 | */ 28 | 29 | 'default' => env('DB_CONNECTION', 'mysql'), 30 | 31 | /* 32 | |-------------------------------------------------------------------------- 33 | | データベース接続 34 | |-------------------------------------------------------------------------- 35 | | 36 | | ここではアプリケーションで用いる各データベース接続を設定します。 37 | | もちろん、以下はLaravelでサポートされているデータベースシステムの 38 | | サンプル設定で、簡単に開発ができることを示すため設置してあります。 39 | | 40 | | 41 | | Laravelで動作する全てのデータベースはPHP PDO機能上で動作します。 42 | | ですから開発を始める前に選択したデータベースのドライバーが開発機に 43 | | インストールされていることを確認してください。 44 | | 45 | */ 46 | 47 | 'connections' => [ 48 | 49 | 'sqlite' => [ 50 | 'driver' => 'sqlite', 51 | 'database' => storage_path('database.sqlite'), 52 | 'prefix' => '', 53 | ], 54 | 55 | 'mysql' => [ 56 | 'driver' => 'mysql', 57 | 'host' => env('DB_HOST', 'localhost'), 58 | 'database' => env('DB_DATABASE', 'forge'), 59 | 'username' => env('DB_USERNAME', 'forge'), 60 | 'password' => env('DB_PASSWORD', ''), 61 | 'charset' => 'utf8', 62 | 'collation' => 'utf8_unicode_ci', 63 | 'prefix' => '', 64 | 'strict' => false, 65 | ], 66 | 67 | 'pgsql' => [ 68 | 'driver' => 'pgsql', 69 | 'host' => env('DB_HOST', 'localhost'), 70 | 'database' => env('DB_DATABASE', 'forge'), 71 | 'username' => env('DB_USERNAME', 'forge'), 72 | 'password' => env('DB_PASSWORD', ''), 73 | 'charset' => 'utf8', 74 | 'prefix' => '', 75 | 'schema' => 'public', 76 | ], 77 | 78 | 'sqlsrv' => [ 79 | 'driver' => 'sqlsrv', 80 | 'host' => env('DB_HOST', 'localhost'), 81 | 'database' => env('DB_DATABASE', 'forge'), 82 | 'username' => env('DB_USERNAME', 'forge'), 83 | 'password' => env('DB_PASSWORD', ''), 84 | 'charset' => 'utf8', 85 | 'prefix' => '', 86 | ], 87 | 88 | ], 89 | 90 | /* 91 | |-------------------------------------------------------------------------- 92 | | マイグレーションリポジトリテーブル 93 | |-------------------------------------------------------------------------- 94 | | 95 | | こで指定したテーブルに、アプリケーションで実行済みの全マイグレーション 96 | | 情報が保存されます。この情報を使用することで、ディスク上の 97 | | どのマイグレーションが未実行なのかを判断することができます。 98 | | 99 | */ 100 | 101 | 'migrations' => 'migrations', 102 | 103 | /* 104 | |-------------------------------------------------------------------------- 105 | | Redisデータベース 106 | |-------------------------------------------------------------------------- 107 | | 108 | | Redisはオープンソースで、早く、進歩的なキー/値保存システムであり 109 | | APCやMemecachedのような典型的なキー/値システムよりも、豊富なコマンドが 110 | | 用意されています。Laravelはこれを使用しやすくします。 111 | | 112 | */ 113 | 114 | 'redis' => [ 115 | 116 | 'cluster' => false, 117 | 118 | 'default' => [ 119 | 'host' => '127.0.0.1', 120 | 'port' => 6379, 121 | 'database' => 0, 122 | ], 123 | 124 | ], 125 | 126 | ]; 127 | -------------------------------------------------------------------------------- /config/filesystems.php: -------------------------------------------------------------------------------- 1 | 'local', 19 | 20 | /* 21 | |-------------------------------------------------------------------------- 22 | | デフォルトクラウドファイルシステムディスク 23 | |-------------------------------------------------------------------------- 24 | | 25 | | 多くのアプリケーションが、ローカルとクラウドの両方にファイルを保存します。 26 | | このため、ここでデフォルトの「クラウド」ドライバーを指定できます。 27 | | このドライバーはコンテナの中で、クラウドディスク実装として結合されます。 28 | | 29 | */ 30 | 31 | 'cloud' => 's3', 32 | 33 | /* 34 | |-------------------------------------------------------------------------- 35 | | ファイルシステムディスク 36 | |-------------------------------------------------------------------------- 37 | | 38 | | ここで好きなだけ、ファイルシステム「ディスク」を設定できます。 39 | | 同じドライバーに複数のディスクを設定することも可能です。指定が必要な 40 | | オプションの例として、各ドライバーのデフォルトが用意されています。 41 | | 42 | */ 43 | 44 | 'disks' => [ 45 | 46 | 'local' => [ 47 | 'driver' => 'local', 48 | 'root' => storage_path('app'), 49 | ], 50 | 51 | 'ftp' => [ 52 | 'driver' => 'ftp', 53 | 'host' => 'ftp.example.com', 54 | 'username' => 'your-username', 55 | 'password' => 'your-password', 56 | 57 | // 追加のFTP設定… 58 | // 'port' => 21, 59 | // 'root' => '', 60 | // 'passive' => true, 61 | // 'ssl' => true, 62 | // 'timeout' => 30, 63 | ], 64 | 65 | 's3' => [ 66 | 'driver' => 's3', 67 | 'key' => 'your-key', 68 | 'secret' => 'your-secret', 69 | 'region' => 'your-region', 70 | 'bucket' => 'your-bucket', 71 | ], 72 | 73 | 'rackspace' => [ 74 | 'driver' => 'rackspace', 75 | 'username' => 'your-username', 76 | 'key' => 'your-key', 77 | 'container' => 'your-container', 78 | 'endpoint' => 'https://identity.api.rackspacecloud.com/v2.0/', 79 | 'region' => 'IAD', 80 | 'url_type' => 'publicURL', 81 | ], 82 | 83 | ], 84 | 85 | ]; 86 | -------------------------------------------------------------------------------- /config/mail.php: -------------------------------------------------------------------------------- 1 | env('MAIL_DRIVER', 'smtp'), 19 | 20 | /* 21 | |-------------------------------------------------------------------------- 22 | | SMTPホストアドレス 23 | |-------------------------------------------------------------------------- 24 | | 25 | | アプリケーションで使用するSMTPサーバーのホストアドレスを指定します。 26 | | デフォルトでは確実な配信サービスを提供しているMailgunメールサービス 27 | | を使用するオプションを設定しています。 28 | | 29 | */ 30 | 31 | 'host' => env('MAIL_HOST', 'smtp.mailgun.org'), 32 | 33 | /* 34 | |-------------------------------------------------------------------------- 35 | | SMTPホストポート 36 | |-------------------------------------------------------------------------- 37 | | 38 | | これはアプリケーションのユーザーにメールを送信するために使用される 39 | | SMTPポートです。デフォルトでは、ホストと同様に、Mailgunメール 40 | | アプリケーション向けに設定しています。 41 | | 42 | */ 43 | 44 | 'port' => env('MAIL_PORT', 587), 45 | 46 | /* 47 | |-------------------------------------------------------------------------- 48 | | グローバルな「送信元」アドレス 49 | |-------------------------------------------------------------------------- 50 | | 51 | | メールの送信元は全部同じメールアドレスに設定したいと思うはずです。 52 | | アプリケーションから送信される全メールの送信元名とアドレスはここで 53 | | 設定します。 54 | | 55 | */ 56 | 57 | 'from' => ['address' => null, 'name' => null], 58 | 59 | /* 60 | |-------------------------------------------------------------------------- 61 | | メール暗号化プロトコル 62 | |-------------------------------------------------------------------------- 63 | | 64 | | アプリケーションがメールでメッセージを送信する時に使用されるべき 65 | | 暗号化プロトコルをここで指定します。とても安全なトランスポート層の 66 | | 暗号化プロトコルがデフォルトとして設定されています。 67 | | 68 | */ 69 | 70 | 'encryption' => env('MAIL_ENCRYPTION', 'tls'), 71 | 72 | /* 73 | |-------------------------------------------------------------------------- 74 | | SMTPサーバーユーザー名 75 | |-------------------------------------------------------------------------- 76 | | 77 | | もしSMTPサーバーが認証でユーザー名を必要としているのでしたら、 78 | | ここで設定してください。サーバーに接続する時の認証に使用されます。 79 | | 更に"password"も、次のオプションで設定できます。 80 | | 81 | */ 82 | 83 | 'username' => env('MAIL_USERNAME'), 84 | 85 | /* 86 | |-------------------------------------------------------------------------- 87 | | SMTPサーバーパスワード 88 | |-------------------------------------------------------------------------- 89 | | 90 | | アプリケーションからSMTPサーバーにメッセージを送信する時に必要な 91 | | パスワードをここで設定します。これはサーバーとの接続時に使用され、 92 | | のアプリケーションからメッセージが送信できます。 93 | | 94 | */ 95 | 96 | 'password' => env('MAIL_PASSWORD'), 97 | 98 | /* 99 | |-------------------------------------------------------------------------- 100 | | Sendmailシステムパス 101 | |-------------------------------------------------------------------------- 102 | | 103 | | メールの送信に"sendmail"ドライバーを使用する場合、このサーバーで 104 | | どこにSendmailがあるのか知る必要があります。ここで指定している 105 | | デフォルトのパスはほとんどのシステムで上手く動作します。 106 | | 107 | */ 108 | 109 | 'sendmail' => '/usr/sbin/sendmail -bs', 110 | 111 | /* 112 | |-------------------------------------------------------------------------- 113 | | メール"Pretend"モード 114 | |-------------------------------------------------------------------------- 115 | | 116 | | このオプションを有効にすると、Web上で本当に送信せず 117 | | 内容を確認できるよう、代わりにアプリケーションの 118 | | ログファイルに書き込みます。これはローカル開発時に便利です。 119 | | 120 | */ 121 | 122 | 'pretend' => false, 123 | 124 | ]; 125 | -------------------------------------------------------------------------------- /config/queue.php: -------------------------------------------------------------------------------- 1 | env('QUEUE_DRIVER', 'sync'), 20 | 21 | /* 22 | |-------------------------------------------------------------------------- 23 | | キュー接続 24 | |-------------------------------------------------------------------------- 25 | | 26 | | ここでアプリケーションが使用するそれぞれのサーバーに対する接続情報を 27 | | 設定します。それぞれのバックエンドのデフォルト接続はLaravelに最初から 28 | | 設定されています。自由に追加してください。 29 | | 30 | */ 31 | 32 | 'connections' => [ 33 | 34 | 'sync' => [ 35 | 'driver' => 'sync', 36 | ], 37 | 38 | 'database' => [ 39 | 'driver' => 'database', 40 | 'table' => 'jobs', 41 | 'queue' => 'default', 42 | 'expire' => 60, 43 | ], 44 | 45 | 'beanstalkd' => [ 46 | 'driver' => 'beanstalkd', 47 | 'host' => 'localhost', 48 | 'queue' => 'default', 49 | 'ttr' => 60, 50 | ], 51 | 52 | 'sqs' => [ 53 | 'driver' => 'sqs', 54 | 'key' => 'your-public-key', 55 | 'secret' => 'your-secret-key', 56 | 'queue' => 'your-queue-url', 57 | 'region' => 'us-east-1', 58 | ], 59 | 60 | 'iron' => [ 61 | 'driver' => 'iron', 62 | 'host' => 'mq-aws-us-east-1.iron.io', 63 | 'token' => 'your-token', 64 | 'project' => 'your-project-id', 65 | 'queue' => 'your-queue-name', 66 | 'encrypt' => true, 67 | ], 68 | 69 | 'redis' => [ 70 | 'driver' => 'redis', 71 | 'connection' => 'default', 72 | 'queue' => 'default', 73 | 'expire' => 60, 74 | ], 75 | 76 | ], 77 | 78 | /* 79 | |-------------------------------------------------------------------------- 80 | | 失敗したキュージョブ 81 | |-------------------------------------------------------------------------- 82 | | 83 | | このオプションでは失敗したキュージョブをログする振る舞いを設定します。 84 | | どのデータベースとテーブルを保存に使用するかをコントロールできます。 85 | | お好きなデータベース/テーブルに変更して下さい。 86 | | 87 | */ 88 | 89 | 'failed' => [ 90 | 'database' => 'mysql', 'table' => 'failed_jobs', 91 | ], 92 | 93 | ]; 94 | -------------------------------------------------------------------------------- /config/services.php: -------------------------------------------------------------------------------- 1 | [ 18 | 'domain' => env('MAILGUN_DOMAIN'), 19 | 'secret' => env('MAILGUN_SECRET'), 20 | ], 21 | 22 | 'mandrill' => [ 23 | 'secret' => env('MANDRILL_SECRET'), 24 | ], 25 | 26 | 'ses' => [ 27 | 'key' => env('SES_KEY'), 28 | 'secret' => env('SES_SECRET'), 29 | 'region' => 'us-east-1', 30 | ], 31 | 32 | 'stripe' => [ 33 | 'model' => App\User::class, 34 | 'key' => env('STRIPE_KEY'), 35 | 'secret' => env('STRIPE_SECRET'), 36 | ], 37 | 38 | ]; 39 | -------------------------------------------------------------------------------- /config/session.php: -------------------------------------------------------------------------------- 1 | env('SESSION_DRIVER', 'file'), 20 | 21 | /* 22 | |-------------------------------------------------------------------------- 23 | | セッション持続時間 24 | |-------------------------------------------------------------------------- 25 | | 26 | | ここでは何分間接続が無い場合にセッションを破棄するのかを 27 | | 指定します。もしブラウザを閉じるか、時間切れならすぐに破棄したい 28 | | 場合は、このオプションを設定してください。 29 | | 30 | */ 31 | 32 | 'lifetime' => 120, 33 | 34 | 'expire_on_close' => false, 35 | 36 | /* 37 | |-------------------------------------------------------------------------- 38 | | セッション暗号化 39 | |-------------------------------------------------------------------------- 40 | | 41 | | このオプションは全セッションデーターを保存する前に、 42 | | s暗号化することを簡単に指定できるように用意しています。Laravelにより 43 | | 全部自動に暗号化されますので、普通にセッションを使用できます。 44 | | 45 | */ 46 | 47 | 'encrypt' => false, 48 | 49 | /* 50 | |-------------------------------------------------------------------------- 51 | | セッションファイルの場所 52 | |-------------------------------------------------------------------------- 53 | | 54 | | "file"セッションドライバーを使用する場合、そのセッションファイルを保存 55 | | する場所を指定する必要があります。デフォルトは設定していますが、 56 | | 他の場所を設定することもできます。ファイルセッションでのみ必要です。 57 | | 58 | */ 59 | 60 | 'files' => storage_path('framework/sessions'), 61 | 62 | /* 63 | |-------------------------------------------------------------------------- 64 | | セッションデータベース接続 65 | |-------------------------------------------------------------------------- 66 | | 67 | | "database"か"redis"セッションドライバーを使用する場合、セッションを 68 | | 管理するために使用するデータベース接続を指定する必要があります。 69 | | 管理するために使用するデータベース接続を指定する必要があります。 70 | | 71 | */ 72 | 73 | 'connection' => null, 74 | 75 | /* 76 | |-------------------------------------------------------------------------- 77 | | セッションデータベーステーブル 78 | |-------------------------------------------------------------------------- 79 | | 80 | | "database"セッションドライバーを使用する時には、セッションを管理する 81 | | テーブルを指定する必要があります。もちろん、分かりやすいデフォルトが 82 | | 指定されていますが、必要であればご自由に変更してください。 83 | | 84 | */ 85 | 86 | 'table' => 'sessions', 87 | 88 | /* 89 | |-------------------------------------------------------------------------- 90 | | セッションのガベージコレクション確率 91 | |-------------------------------------------------------------------------- 92 | | 93 | | いくつかのセッションドライバーは情報の保存場所から古いセッションを 94 | | クリーンアップする必要があります。ここでは一回のリクエストに対し 95 | | どのくらいの確率で行うかを指定します。デフォルトでは100回に2回です。 96 | | 97 | */ 98 | 99 | 'lottery' => [2, 100], 100 | 101 | /* 102 | |-------------------------------------------------------------------------- 103 | | セッションクッキー名 104 | |-------------------------------------------------------------------------- 105 | | 106 | | ここではセッションインスタンスをIDで識別するために使用されるクッキーの 107 | | 名前を変更できます。ここで指定された名前はフレームワークにより新しい 108 | | セッションクッキーが生成されるたび、全てのドライバーに対し使用されます。 109 | | 110 | */ 111 | 112 | 'cookie' => 'laravel_session', 113 | 114 | /* 115 | |-------------------------------------------------------------------------- 116 | | セッションクッキーパス 117 | |-------------------------------------------------------------------------- 118 | | 119 | | セッションクッキーパスはクッキーが有効なパスを決定します。 120 | | 典型的にはアプリケーションのルートパスを指定しますが 121 | | 必要に合わせて自由に変更してください。 122 | | 123 | */ 124 | 125 | 'path' => '/', 126 | 127 | /* 128 | |-------------------------------------------------------------------------- 129 | | セッションクッキードメイン 130 | |-------------------------------------------------------------------------- 131 | | 132 | | ここでアプリケーションのセッションを認識するために使用されるクッキーの 133 | | ドメインを変更できます。これはクッキーが有効なドメインを決めるため 134 | | 使用されます。デフォルト値は未定義で、納得してもらえると思います。 135 | | 136 | */ 137 | 138 | 'domain' => null, 139 | 140 | /* 141 | |-------------------------------------------------------------------------- 142 | | HTTPS専用クッキー 143 | |-------------------------------------------------------------------------- 144 | | 145 | | このオプションをtrueに設定することにより、セッションクッキーは 146 | | ブラウザーがHTTPS接続されている場合のみ、送り返されてきます。 147 | | これにより安全な送信が出来なければ、クッキー送信を防ぐことができます。 148 | | 149 | */ 150 | 151 | 'secure' => false, 152 | 153 | ]; 154 | -------------------------------------------------------------------------------- /config/view.php: -------------------------------------------------------------------------------- 1 | [ 17 | realpath(base_path('resources/views')), 18 | ], 19 | 20 | /* 21 | |-------------------------------------------------------------------------- 22 | | コンパイル済みビューパス 23 | |-------------------------------------------------------------------------- 24 | | 25 | | このオプションにはアプリケーションのコンパイル済みBlade 26 | | テンプレートの保存場所を指定します。通常、この値はstorageディレクトリーの 27 | | 中になるでしょう。しかし、他と同様、お好きな値に変更してください。 28 | | 29 | */ 30 | 31 | 'compiled' => realpath(storage_path('framework/views')), 32 | 33 | ]; 34 | -------------------------------------------------------------------------------- /database/.gitignore: -------------------------------------------------------------------------------- 1 | *.sqlite 2 | -------------------------------------------------------------------------------- /database/factories/ModelFactory.php: -------------------------------------------------------------------------------- 1 | define(App\User::class, function (Faker\Generator $faker) { 15 | return [ 16 | 'name' => $faker->name, 17 | 'email' => $faker->email, 18 | 'password' => bcrypt(str_random(10)), 19 | 'remember_token' => str_random(10), 20 | ]; 21 | }); 22 | -------------------------------------------------------------------------------- /database/migrations/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/laravel-jp-reference/chapter2/57ec1b2c84de2bf1c1c0715971c457f2b421edc7/database/migrations/.gitkeep -------------------------------------------------------------------------------- /database/migrations/2014_10_12_000000_create_users_table.php: -------------------------------------------------------------------------------- 1 | increments('id'); 15 | $table->string('name'); 16 | $table->string('email')->unique(); 17 | $table->string('password', 60); 18 | $table->rememberToken(); 19 | $table->timestamps(); 20 | }); 21 | } 22 | 23 | /** 24 | * マイグレーションを戻す 25 | */ 26 | public function down() 27 | { 28 | Schema::drop('users'); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /database/migrations/2014_10_12_100000_create_password_resets_table.php: -------------------------------------------------------------------------------- 1 | string('email')->index(); 15 | $table->string('token')->index(); 16 | $table->timestamp('created_at'); 17 | }); 18 | } 19 | 20 | /** 21 | * マイグレーションを戻す 22 | */ 23 | public function down() 24 | { 25 | Schema::drop('password_resets'); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /database/seeds/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/laravel-jp-reference/chapter2/57ec1b2c84de2bf1c1c0715971c457f2b421edc7/database/seeds/.gitkeep -------------------------------------------------------------------------------- /database/seeds/DatabaseSeeder.php: -------------------------------------------------------------------------------- 1 | call(Make50User::class); 18 | 19 | Model::reguard(); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /database/seeds/Make50User.php: -------------------------------------------------------------------------------- 1 | make([ 20 | 'password' => bcrypt('password'), 21 | ]); 22 | 23 | // EloquentモデルのUserインスタンスを保存、 24 | // eachはコレクションメソッド。 25 | // foreachで回すこともできる。 26 | $users->each(function ($item) { 27 | $item->save(); 28 | }); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /gulpfile.js: -------------------------------------------------------------------------------- 1 | var elixir = require('laravel-elixir'); 2 | 3 | /* 4 | |-------------------------------------------------------------------------- 5 | | Elixirアセット管理 6 | |-------------------------------------------------------------------------- 7 | | 8 | | ElixirはLaravelアプリケーションなのための、基本的なGulpタスクを 9 | | 定義する、美しく流暢なAPIを提供します。デフォルトでも、アプリケーションの 10 | | Sassファイルをコンパイルし、同時にベンダーのリソースを発行します。 11 | | 12 | */ 13 | 14 | elixir(function(mix) { 15 | mix.sass('app.scss'); 16 | }); 17 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "private": true, 3 | "devDependencies": { 4 | "gulp": "^3.8.8" 5 | }, 6 | "dependencies": { 7 | "laravel-elixir": "^3.0.0", 8 | "bootstrap-sass": "^3.0.0" 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /phpspec.yml: -------------------------------------------------------------------------------- 1 | suites: 2 | main: 3 | namespace: App 4 | psr4_prefix: App 5 | src_path: app 6 | -------------------------------------------------------------------------------- /phpunit.xml: -------------------------------------------------------------------------------- 1 | 2 | 12 | 13 | 14 | ./tests/ 15 | 16 | 17 | 18 | 19 | app/ 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /public/.htaccess: -------------------------------------------------------------------------------- 1 | 2 | 3 | Options -MultiViews 4 | 5 | 6 | RewriteEngine On 7 | 8 | # Redirect Trailing Slashes If Not A Folder... 9 | RewriteCond %{REQUEST_FILENAME} !-d 10 | RewriteRule ^(.*)/$ /$1 [L,R=301] 11 | 12 | # Handle Front Controller... 13 | RewriteCond %{REQUEST_FILENAME} !-d 14 | RewriteCond %{REQUEST_FILENAME} !-f 15 | RewriteRule ^ index.php [L] 16 | 17 | -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/laravel-jp-reference/chapter2/57ec1b2c84de2bf1c1c0715971c457f2b421edc7/public/favicon.ico -------------------------------------------------------------------------------- /public/index.php: -------------------------------------------------------------------------------- 1 | 8 | */ 9 | 10 | /* 11 | |-------------------------------------------------------------------------- 12 | | オートローダーの登録 13 | |-------------------------------------------------------------------------- 14 | | 15 | | omposerは便利なクラスローダーをアプリケーションのために自動的に 16 | | 生成してくれます。使わない手はありません!ここでそのスクリプトを 17 | | 読み込み、これ以降、クラスを「手動で」読み込む手間から 18 | | 解放されましょう。リラックスできて、気分がいいですね。 19 | | 20 | */ 21 | 22 | require __DIR__.'/../bootstrap/autoload.php'; 23 | 24 | /* 25 | |-------------------------------------------------------------------------- 26 | | 明かりを灯す 27 | |-------------------------------------------------------------------------- 28 | | 29 | | 私達はPHP開発を照らす必要があります。ですから明かりを灯しましょう。 30 | | これはフレームワークのブートストラップで準備は整っています。 31 | | ではこのアプリケーションをロードしましょう。これでユーザーを 32 | | 喜ばせるために、実行し、レスポンスをブラウザに送り返せます。 33 | | 34 | */ 35 | 36 | $app = require_once __DIR__.'/../bootstrap/app.php'; 37 | 38 | /* 39 | |-------------------------------------------------------------------------- 40 | | アプリケーションの実行 41 | |-------------------------------------------------------------------------- 42 | | 43 | | アプリケーションの用意が整えば、カーネルを通じやってきた 44 | | リクエストを処理し、関連するレスポンスをユーザーのブラウザへ 45 | | 送り返すことで、彼らを刺激する、私達の創造的で素晴らしい 46 | | アプリケーションを楽しんでもらいましょう。 47 | | 48 | */ 49 | 50 | $kernel = $app->make(Illuminate\Contracts\Http\Kernel::class); 51 | 52 | $response = $kernel->handle( 53 | $request = Illuminate\Http\Request::capture() 54 | ); 55 | 56 | $response->send(); 57 | 58 | $kernel->terminate($request, $response); 59 | -------------------------------------------------------------------------------- /public/robots.txt: -------------------------------------------------------------------------------- 1 | User-agent: * 2 | Disallow: 3 | -------------------------------------------------------------------------------- /readme-laravel.md: -------------------------------------------------------------------------------- 1 | ## Laravel PHP Framework 2 | 3 | [![Build Status](https://travis-ci.org/laravel/framework.svg)](https://travis-ci.org/laravel/framework) 4 | [![Total Downloads](https://poser.pugx.org/laravel/framework/d/total.svg)](https://packagist.org/packages/laravel/framework) 5 | [![Latest Stable Version](https://poser.pugx.org/laravel/framework/v/stable.svg)](https://packagist.org/packages/laravel/framework) 6 | [![Latest Unstable Version](https://poser.pugx.org/laravel/framework/v/unstable.svg)](https://packagist.org/packages/laravel/framework) 7 | [![License](https://poser.pugx.org/laravel/framework/license.svg)](https://packagist.org/packages/laravel/framework) 8 | 9 | Laravel is a web application framework with expressive, elegant syntax. We believe development must be an enjoyable, creative experience to be truly fulfilling. Laravel attempts to take the pain out of development by easing common tasks used in the majority of web projects, such as authentication, routing, sessions, queueing, and caching. 10 | 11 | Laravel is accessible, yet powerful, providing powerful tools needed for large, robust applications. A superb inversion of control container, expressive migration system, and tightly integrated unit testing support give you the tools you need to build any application with which you are tasked. 12 | 13 | ## Official Documentation 14 | 15 | Documentation for the framework can be found on the [Laravel website](http://laravel.com/docs). 16 | 17 | ## Contributing 18 | 19 | Thank you for considering contributing to the Laravel framework! The contribution guide can be found in the [Laravel documentation](http://laravel.com/docs/contributions). 20 | 21 | ## Security Vulnerabilities 22 | 23 | If you discover a security vulnerability within Laravel, please send an e-mail to Taylor Otwell at taylor@laravel.com. All security vulnerabilities will be promptly addressed. 24 | 25 | ### License 26 | 27 | The Laravel framework is open-sourced software licensed under the [MIT license](http://opensource.org/licenses/MIT) 28 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | Laravelリファレンス 2章サンプルプロジェクト 2 | ============================================ 3 | 4 | > この書籍は2015年12月の時点の動作環境で動作確認を行っております。その後、PHPのバージョンアップ、Composerの仕様変更、さらにLaravel5.1がLTSにもかかわらず、機能追加されています。それらの影響で、動作しない部分も発生しています。 5 | > 6 | > composer install実行時にエラーが発生する場合は、プロジェクトルートに存在するcomposer.lockファイルを削除してください。 7 | > 8 | > その後、--no-scriptsオプションを付け、インストールを実行してください。`composer install --no-scripts` もしくは `composer update --no-scripts`です。 9 | 10 | このリポジトリはImpress社から発行されている、「Laravelリファレンス」の「02-02 初めてのアプリケーション(P.034)」で紹介しているサンプルプロジェクトです。インストール方法など詳細は書籍を参考にしてください。 11 | 12 | * 設定はチュートリアル向けにしています。 13 | * * 認証情報を設定しなくても済むようにメールドライバーは開発時向けのlog、データベースドライバーはsqliteを使用しています。必要に応じ、変更してください。 14 | 15 | * ユーザーのCRUD処理を実装しています。 16 | * * ユーザの作成はLaravel組み込みの認証機能のユーザー登録を利用しています。一覧表示、更新、削除処理はUserControllerクラスで行っています。 17 | 18 | * Laravel組み込みの認証機能を利用しています。 19 | * * 本サンプルプロジェクト作成後にリリースされた、バージョン5.1.11の新機能である「認可」は使用していません。 20 | 21 | * ユーザー登録時に「登録済み」メールを送っていますが、ユーザー情報を含むイベントを発行し、ハンドラーでメール送信処理を行っています。 22 | * * logドライバーを使用しているためメールは実際には送信されず、storage/logs/下のログファイルに書き込まれます。 23 | 24 | * 例外をハンドラーで処理する方法やカスタムエラーページを実装しています。 25 | 26 | * HTMLの構造がわかりやすいように、"master"ブランチではシンプルなPure CSSフレームワークを採用しています。 27 | 28 | "master"以外のブランチは、名前が示すバリエーションです。"materialize"はPure CSSフレームワークの代わりに、Materialize CSSフレームワークを使用しています。"bootstrap"はBootstrapをCSSフレームワークに使用しています。 29 | 30 | サンプルプロジェクトですので、わかりやすさを優先しています。アプリケーションとして完全な動作を保証するものではありません。 31 | (たとえば、バリデーションの設定とデータベース上の項目の大きさは一致していません。 32 | ユーザー一覧表示のページネーション表示で、最終ページでユーザーを全部削除していくと、ページ番号の割り付けに不具合が起きます。 33 | 本来は削除できなくするべきである最初のユーザーも削除できます。 34 | 変更を目視できるように、ユーザーの一覧ページにはパスワードのハッシュ値を表示しています。) 35 | 36 | ## インストール方法 37 | 38 | 以下の手順でインストールしてください。 39 | 40 | #### 1. サンプルプログラムダウンロード 41 | 42 | ```` 43 | $ git clone https://github.com/laravel-jp-reference/chapter2.git 展開ディレクトリ名 44 | ```` 45 | 46 | > ※Impressからサンプルプログラムの圧縮ファイルをダウンロードし、展開した場合はコマンドを実行する必要ありません。 47 | 48 | #### 2. 展開ディレクトリへ移動 49 | 50 | 前の手順でコードを展開したディレクトリーへ移動します。 51 | 52 | ```` 53 | $ cd 展開ディレクトリ名 54 | ```` 55 | 56 | #### 3. Laravelと依存コンポーネントダウンロード 57 | 58 | Composerを用いて、Laravel本体と、動作に必要な依存コンポーネントをダウンロードします。 59 | 60 | ```` 61 | $ composer install 62 | # もしくは 63 | $ composer update 64 | ```` 65 | > Composerの仕様変更のため、install実行時にエラーが起きることがあります。その場合は、プロジェクトルートに存在するcomposer.lockファイルを削除してください。そして、実行時に`--no-scripts`オプションを付けてインストールしてください。 66 | 67 | #### 4. .envファイルの設定 68 | 69 | サンプル.envファイルをコピーし、.envファイルの内容を指定します。 70 | 71 | ```` 72 | $ cp .env.example .env 73 | $ php artisan key:generate 74 | ```` 75 | 76 | このサンプルプログラムではユーザーのCRUD処理とユーザー認証を行うため、データベースを必要としています。 77 | .envファイル中の「DBセッティング」項目を使用するデータベース環境に合わせ、設定してください。 78 | 79 | デフォルトではデータベースの認証情報を指定しなくて済むようにSQLiteを指定してあります。 80 | このままSQLiteを使用する場合は、データベースファイルを作成してください。 81 | 82 | ```` 83 | $ touch storage/database.sqlite 84 | ```` 85 | 86 | SQLite以外のデータベースを使用する場合は、あらかじめ使用するデータベースを作成しておく必要があります。 87 | 続いて、データベースエンジンに合わせてドライバー名をDB_CONNECTION項目に設定してください。 88 | 設定可能なドライバーは本文の表3.1(P.083)、もしくはconfig/database.phpファイルのconnections項目で確認してください。 89 | 更に、DB_DATABASE(データベース名)、DB_USERNAME(ユーザー名)、DB_PASSWORD(パスワード)も指定する必要があります。 90 | 91 | データベースの設定が済んだら、必要なテーブルを生成するために「マイグレーション(本文3-2、P.086)」を行います。 92 | 93 | ```` 94 | $ php artisan migrate 95 | ```` 96 | 97 | Laravelのプロジェクトには、認証のために必要なusersテーブルを生成するマイグレーションがデフォルトで 98 | app/database/migrationsディレクトリー下に用意されています。 99 | 100 | #### 5. アプリケーションの設定 101 | 102 | 「2-1-3 アプリケーションの設定」(本文P.029)に従い、Laravelの環境を指定します。 103 | 104 | 本文のチュートリアルでは、Webサーバーを使わずPHP組み込みサーバーを利用する方法を紹介しています。 105 | 106 | ```` 107 | $ php artisan serve 108 | ```` 109 | 110 | この方法で動作させる場合、これ以上の設定は必要ありません。 111 | 112 | 組み込みサーバーを使用せず、Webサーバーで動作させる場合は「ディレクトリーパーミッションの設定(P.029)」を行う必要があります。本文でも記述していませんが、もちろん仮想ホストなどを設定し、ドキュメントルートをプロジェクトのpublicディレクトリに設定する必要もあります。 113 | 114 | ブラウザからアクセスして、表示を確認してください。PHP組み込みサーバーを利用する場合は、http://localhost:8000 にアクセスします。 115 | Webサーバーを利用する場合は、設定したURLへアクセスしてください。 116 | 117 | 正しく動作していれば、シンプルなトップページが表示されます。(印刷用に作成したため、白黒です。) 118 | 119 | #### 6. ユーザーの作成 120 | 121 | このチュートリアルでは、ユーザー情報を操作できる管理者は、最初に作成したユーザー(データベース上のid項目の値が1であるユーザー)にしています。このユーザーを作成するため、ユーザー登録ボタンをクリックし 122 | (PHP組み込みサーバーを使用する場合はhttp://localhost:8000/auth/register)、ユーザーを作成してください。 123 | 124 | さらに、ページネーション(ページ付け)の動作を確認するには、ユーザーを合計で6人分以上作成する必要があります。 125 | データベースの初期値を設定するためLaravelに用意されている、「3-2-5 シーダー」(P.095)を用いて50人分のユーザーを一度に追加することも可能です。 126 | 127 | ```` 128 | $ php artisan db:seed 129 | ```` 130 | 131 | 生成されるデータはランダムなもので、「6-3 モデルファクトリ」(P.313)の機能を利用しています。 132 | 他のユーザーでもログインして試せるように、生成ユーザーのパスワードは全部"password"にしています。 133 | 134 | ## 修正点 135 | 136 | 初期状態のプロジェクトに対し、どこに手を入れてあるかを確認するにはgit diffを利用してください。 137 | 138 | ~~~ 139 | git diff init master 140 | ~~~ 141 | 142 | 変更を確認するには、ルート定義のapp/Http/routes.phpファイル、 143 | 2つのコントローラ(app/Http/Controllers/HomeController.php、app/Http/Controllers/UserContoller.php) 144 | から確認すると、要点がつかみやすいでしょう。 145 | 146 | ビューを読むときはまず全体のレイアウトのresources/views/layout.blade.phpと、 147 | コメントを特に多く入れているログインビューのresources/views/auth/login.blade.phpファイルから 148 | 調べると、理解しやすいでしょう。 149 | 150 | ## ライセンス 151 | 152 | このプロジェクトファイルはImpress社から出版されている「Laravelリファレンス」を補助する内容です。そのため、このreadme.mdファイルのみ、川瀬裕久による通常の著作物です。 153 | 154 | LaravelはMITライセンスの元に公開されています。作者はTaylor Otwellさんです。このサンプルプロジェクトは、GitHubで公開されているlaravel/laravelリポジトリーの内容をベースとしています。 155 | 156 | このサンプルプログラムに含まれる設定ファイルやクラスのコメントはGitHubで公開しているlaravel-ja/comja5を利用し、日本語に翻訳しています。Comja5はMITライセンスのもとに公開しています。作者は川瀬裕久です。 157 | 158 | readme.mdを除く、このサンプルプログラムはMITライセンスのもとに公開しています。作者は川瀬裕久です。 159 | -------------------------------------------------------------------------------- /resources/assets/sass/app.scss: -------------------------------------------------------------------------------- 1 | // @import "node_modules/bootstrap-sass/assets/stylesheets/bootstrap"; 2 | 3 | -------------------------------------------------------------------------------- /resources/lang/en/auth.php: -------------------------------------------------------------------------------- 1 | 'These credentials do not match our records.', 17 | 'throttle' => 'Too many login attempts. Please try again in :seconds seconds.', 18 | 19 | ]; 20 | -------------------------------------------------------------------------------- /resources/lang/en/pagination.php: -------------------------------------------------------------------------------- 1 | '« Previous', 17 | 'next' => 'Next »', 18 | 19 | ]; 20 | -------------------------------------------------------------------------------- /resources/lang/en/passwords.php: -------------------------------------------------------------------------------- 1 | 'Passwords must be at least six characters and match the confirmation.', 17 | 'reset' => 'Your password has been reset!', 18 | 'sent' => 'We have e-mailed your password reset link!', 19 | 'token' => 'This password reset token is invalid.', 20 | 'user' => "We can't find a user with that e-mail address.", 21 | 22 | ]; 23 | -------------------------------------------------------------------------------- /resources/lang/en/validation.php: -------------------------------------------------------------------------------- 1 | 'The :attribute must be accepted.', 17 | 'active_url' => 'The :attribute is not a valid URL.', 18 | 'after' => 'The :attribute must be a date after :date.', 19 | 'alpha' => 'The :attribute may only contain letters.', 20 | 'alpha_dash' => 'The :attribute may only contain letters, numbers, and dashes.', 21 | 'alpha_num' => 'The :attribute may only contain letters and numbers.', 22 | 'array' => 'The :attribute must be an array.', 23 | 'before' => 'The :attribute must be a date before :date.', 24 | 'between' => [ 25 | 'numeric' => 'The :attribute must be between :min and :max.', 26 | 'file' => 'The :attribute must be between :min and :max kilobytes.', 27 | 'string' => 'The :attribute must be between :min and :max characters.', 28 | 'array' => 'The :attribute must have between :min and :max items.', 29 | ], 30 | 'boolean' => 'The :attribute field must be true or false.', 31 | 'confirmed' => 'The :attribute confirmation does not match.', 32 | 'date' => 'The :attribute is not a valid date.', 33 | 'date_format' => 'The :attribute does not match the format :format.', 34 | 'different' => 'The :attribute and :other must be different.', 35 | 'digits' => 'The :attribute must be :digits digits.', 36 | 'digits_between' => 'The :attribute must be between :min and :max digits.', 37 | 'email' => 'The :attribute must be a valid email address.', 38 | 'exists' => 'The selected :attribute is invalid.', 39 | 'filled' => 'The :attribute field is required.', 40 | 'image' => 'The :attribute must be an image.', 41 | 'in' => 'The selected :attribute is invalid.', 42 | 'integer' => 'The :attribute must be an integer.', 43 | 'ip' => 'The :attribute must be a valid IP address.', 44 | 'json' => 'The :attribute must be a valid JSON string.', 45 | 'max' => [ 46 | 'numeric' => 'The :attribute may not be greater than :max.', 47 | 'file' => 'The :attribute may not be greater than :max kilobytes.', 48 | 'string' => 'The :attribute may not be greater than :max characters.', 49 | 'array' => 'The :attribute may not have more than :max items.', 50 | ], 51 | 'mimes' => 'The :attribute must be a file of type: :values.', 52 | 'min' => [ 53 | 'numeric' => 'The :attribute must be at least :min.', 54 | 'file' => 'The :attribute must be at least :min kilobytes.', 55 | 'string' => 'The :attribute must be at least :min characters.', 56 | 'array' => 'The :attribute must have at least :min items.', 57 | ], 58 | 'not_in' => 'The selected :attribute is invalid.', 59 | 'numeric' => 'The :attribute must be a number.', 60 | 'regex' => 'The :attribute format is invalid.', 61 | 'required' => 'The :attribute field is required.', 62 | 'required_if' => 'The :attribute field is required when :other is :value.', 63 | 'required_with' => 'The :attribute field is required when :values is present.', 64 | 'required_with_all' => 'The :attribute field is required when :values is present.', 65 | 'required_without' => 'The :attribute field is required when :values is not present.', 66 | 'required_without_all' => 'The :attribute field is required when none of :values are present.', 67 | 'same' => 'The :attribute and :other must match.', 68 | 'size' => [ 69 | 'numeric' => 'The :attribute must be :size.', 70 | 'file' => 'The :attribute must be :size kilobytes.', 71 | 'string' => 'The :attribute must be :size characters.', 72 | 'array' => 'The :attribute must contain :size items.', 73 | ], 74 | 'string' => 'The :attribute must be a string.', 75 | 'timezone' => 'The :attribute must be a valid zone.', 76 | 'unique' => 'The :attribute has already been taken.', 77 | 'url' => 'The :attribute format is invalid.', 78 | 79 | /* 80 | |-------------------------------------------------------------------------- 81 | | Custom バリデーション言語行 82 | |-------------------------------------------------------------------------- 83 | | 84 | | "属性.ルール"の規約でキーを指定することでカスタムバリデーション 85 | | メッセージを定義できます。指定した属性ルールに対する特定の 86 | | カスタム言語行を手早く指定できます。 87 | | 88 | */ 89 | 90 | 'custom' => [ 91 | 'attribute-name' => [ 92 | 'rule-name' => 'custom-message', 93 | ], 94 | ], 95 | 96 | /* 97 | |-------------------------------------------------------------------------- 98 | | カスタムバリデーション属性名 99 | |-------------------------------------------------------------------------- 100 | | 101 | | 以下の言語行は、例えば"email"の代わりに「メールアドレス」のように、 102 | | 読み手にフレンドリーな表現でプレースホルダーを置き換えるために指定する 103 | | 言語行です。これはメッセージをよりきれいに表示するために役に立ちます。 104 | | 105 | */ 106 | 107 | 'attributes' => [ 108 | 'email' => 'e-mail', 109 | ], 110 | 111 | ]; 112 | -------------------------------------------------------------------------------- /resources/lang/ja/auth.php: -------------------------------------------------------------------------------- 1 | 'ログイン情報が登録されていません。', 17 | 'throttle' => 'ログインに続けて失敗しています。:seconds秒後に再度お試しください。', 18 | 19 | ]; 20 | -------------------------------------------------------------------------------- /resources/lang/ja/pagination.php: -------------------------------------------------------------------------------- 1 | '« 前', 17 | 'next' => '次 »', 18 | 19 | ]; 20 | -------------------------------------------------------------------------------- /resources/lang/ja/passwords.php: -------------------------------------------------------------------------------- 1 | 'パスワードは最低6文字で、確認項目と一致している必要があります。', 17 | 'reset' => 'パスワードをリセットしました。', 18 | 'sent' => 'パスワードリセットメールを送信しました。', 19 | 'token' => 'このパスワードリセットトークンは無効です。', 20 | 'user' => "メールアドレスに一致するユーザーは存在していません。", 21 | 22 | ]; 23 | -------------------------------------------------------------------------------- /resources/lang/ja/validation.php: -------------------------------------------------------------------------------- 1 | ':attributeを承認してください。', 17 | 'active_url' => ':attributeが有効なURLではありません。', 18 | 'after' => ':attributeには、:date以降の日付を指定してください。', 19 | 'alpha' => ':attributeはアルファベットのみがご利用できます。', 20 | 'alpha_dash' => ':attributeはアルファベットとダッシュ(-)及び下線(_)がご利用できます。', 21 | 'alpha_num' => ':attributeはアルファベット数字がご利用できます。', 22 | 'array' => ':attributeは配列でなくてはなりません。', 23 | 'before' => ':attributeには、:date以前の日付をご利用ください。', 24 | 'between' => [ 25 | 'numeric' => ':attributeは、:minから:maxの間で指定してください。', 26 | 'file' => ':attributeは、:min kBから、:max kBの間で指定してください。', 27 | 'string' => ':attributeは、:min文字から、:max文字の間で指定してください。', 28 | 'array' => ':attributeは、:min個から:max個の間で指定してください。', 29 | ], 30 | 'boolean' => ':attributeは、trueかfalseを指定してください。', 31 | 'confirmed' => ':attributeと、確認フィールドとが、一致していません。', 32 | 'date' => ':attributeには有効な日付を指定してください。', 33 | 'date_format' => ':attributeは:format形式で指定してください。', 34 | 'different' => ':attributeと:otherには、異なった内容を指定してください。', 35 | 'digits' => ':attributeは:digits桁で指定してください。', 36 | 'digits_between' => ':attributeは:min桁から:max桁の間で指定してください。', 37 | 'email' => ':attributeには、有効なメールアドレスを指定してください。', 38 | 'exists' => '選択された:attributeは正しくありません。', 39 | 'filled' => ':attributeは必ず指定してください。', 40 | 'image' => ':attributeには画像ファイルを指定してください。', 41 | 'in' => '選択された:attributeは正しくありません。', 42 | 'integer' => ':attributeは整数で指定してください。', 43 | 'ip' => ':attributeには、有効なIPアドレスを指定してください。', 44 | 'json' => ':attributeには、有効なJSON文字列を指定してください。', 45 | 'max' => [ 46 | 'numeric' => ':attributeには、:max以下の数字を指定してください。', 47 | 'file' => ':attributeには、:max kB以下のファイルを指定してください。', 48 | 'string' => ':attributeは、:max文字以下で指定してください。', 49 | 'array' => ':attributeは:max個以下指定してください。', 50 | ], 51 | 'mimes' => ':attributeには:valuesタイプのファイルを指定してください。', 52 | 'min' => [ 53 | 'numeric' => ':attributeには、:min以上の数字を指定してください。', 54 | 'file' => ':attributeには、:min kB以上のファイルを指定してください。', 55 | 'string' => ':attributeは、:min文字以上で指定してください。', 56 | 'array' => ':attributeは:min個以上指定してください。', 57 | ], 58 | 'not_in' => '選択された:attributeは正しくありません。', 59 | 'numeric' => ':attributeには、数字を指定してください。', 60 | 'regex' => ':attributeに正しい形式を指定してください。', 61 | 'required' => ':attributeは必ず指定してください。', 62 | 'required_if' => ':otherが:valueの場合、:attributeも指定してください。', 63 | 'required_with' => ':valuesを指定する場合は、:attributeも指定してください。', 64 | 'required_with_all' => ':valuesを指定する場合は、:attributeも指定してください。', 65 | 'required_without' => ':valuesを指定しない場合は、:attributeを指定してください。', 66 | 'required_without_all' => ':valuesのどれも指定しない場合は、:attributeを指定してください。', 67 | 'same' => ':attributeと:otherには同じ値を指定してください。', 68 | 'size' => [ 69 | 'numeric' => ':attributeは:sizeを指定してください。', 70 | 'file' => ':attributeのファイルは、:sizeキロバイトでなくてはなりません。', 71 | 'string' => ':attributeは:size文字で指定してください。', 72 | 'array' => ':attributeは:size個指定してください。', 73 | ], 74 | 'string' => ':attributeは文字列を指定してください。', 75 | 'timezone' => ':attributeには、有効なゾーンを指定してください。', 76 | 'unique' => ':attributeの値は既に存在しています。', 77 | 'url' => ':attributeに正しい形式を指定してください。', 78 | 79 | /* 80 | |-------------------------------------------------------------------------- 81 | | Custom バリデーション言語行 82 | |-------------------------------------------------------------------------- 83 | | 84 | | "属性.ルール"の規約でキーを指定することでカスタムバリデーション 85 | | メッセージを定義できます。指定した属性ルールに対する特定の 86 | | カスタム言語行を手早く指定できます。 87 | | 88 | */ 89 | 90 | 'custom' => [ 91 | '属性名' => [ 92 | 'ルール名' => 'カスタムメッセージ', 93 | ], 94 | ], 95 | 96 | /* 97 | |-------------------------------------------------------------------------- 98 | | カスタムバリデーション属性名 99 | |-------------------------------------------------------------------------- 100 | | 101 | | 以下の言語行は、例えば"email"の代わりに「メールアドレス」のように、 102 | | 読み手にフレンドリーな表現でプレースホルダーを置き換えるために指定する 103 | | 言語行です。これはメッセージをよりきれいに表示するために役に立ちます。 104 | | 105 | */ 106 | 107 | 'attributes' => [ 108 | 'name' => '名前', 109 | 'email' => 'メールアドレス', 110 | 'password' => 'パスワード', 111 | ], 112 | 113 | ]; 114 | -------------------------------------------------------------------------------- /resources/views/auth/login.blade.php: -------------------------------------------------------------------------------- 1 | {{-- 親ビューの指定 --}} 2 | @extends('layout') 3 | 4 | {{-- 以降の@sectionから、@endsectionまでの間が各セクションの内容となる --}} 5 | 6 | @section('title') 7 | ログイン:UserモデルCRUDサンプル 8 | @endsection 9 | 10 | @section('content') 11 |

ログイン

12 | 13 |
14 |
15 | 16 | {{-- nameフィールド --}} 17 |
18 | {{-- 19 | @ifから@endifの間で、emailフィールドに対するバリデーションエラーを表示している。 20 | 21 | ビューの$errors変数は必ず存在し、MessageBagインターフェイスを実装している。 22 | 通常これにはバリデーションのエラーが渡される。エラー発生時のリダイレクトに 23 | 対しwithErrorsメソッドを付けると、MessageBagがセッション経由でビューに 24 | 渡る。セッションに保存されていない場合でも、メッセージを含まないMessageBagが 25 | 生成され、$errorsにセットされる。 26 | --}} 27 | @if ($errors->has('email')) 28 |

{{ $errors->first('email') }}

29 | @endif 30 | 31 | 32 |
33 | 34 | {{-- passwordフィールド --}} 35 |
36 | @if ($errors->has('password')) 37 |

{{ $errors->first('password') }}

38 | @endif 39 | 40 | {{-- 41 | セキュリティのプラクティスに従い、 42 | パスワードの入力値は表示しない = レスポンスへ含めない 43 | --}} 44 | 45 |
46 | 47 |
48 | 49 | {{-- remember me(継続ログイン)の有効無効指定チェックボックス --}} 50 | 55 | 56 | {{-- ログインボタン --}} 57 | 58 | 59 | {{-- パスワードリセットボタン --}} 60 | {{-- 61 | ルートURLにサブディレクトリーが含まれる場合を考慮し、 62 | URIをリンク先に指定する場合でもurlヘルパーでフルURLを生成する。 63 | 64 | 今回は静的にURLを生成しているだけのため問題はないが、 65 | スラグなどで生成URLへユーザー入力を含める場合、 66 | URL生成系ヘルパーやクラスの使用時には、セキュリティや不具合に 67 | 考慮して適切にフィルタリングを行う。 68 | たとえばシンプルな例では、ユーザーがタイトルに"/"を含め、それを 69 | 直接スラグにすると、URL上ではセグメントの分割になり、ルート定義に 70 | 一致しなくなる可能性が出る。 71 | --}} 72 | 73 | パスワードリセット 74 | 75 |
76 | 77 | {{-- 78 | CSRFを防ぐためのトークンを隠しフィールドに埋め込むコードの生成。 79 | トークンの値チェックは毎回セッションごとに適用される 80 | VerifyCsrfTokenグローバルミドルウェアで行っている。 81 | 82 | 参照 : 83 | 本文 : 「7-1-3 CSRF対策」(P.749) 84 | ドキュメント : http://readouble.com/laravel/5/1/ja/routing.html#csrf-protection 85 | --}} 86 | {!! csrf_field() !!} 87 |
88 |
89 | @endsection 90 | -------------------------------------------------------------------------------- /resources/views/auth/password.blade.php: -------------------------------------------------------------------------------- 1 | {{-- 親ビューの指定 --}} 2 | @extends('layout') 3 | 4 | {{-- 以降の@sectionから、@endsectionまでの間が各セクションの内容となる --}} 5 | 6 | @section('title') 7 | リセットメール送信:UserモデルCRUDサンプル 8 | @endsection 9 | 10 | @section('content') 11 |

パスワードリセットメール送信

12 |
13 |
14 | 15 | {{-- emailフィールド --}} 16 |
17 | @if ($errors->has('email')) 18 |

{{ $errors->first('email') }}

19 | @endif 20 | 21 | 23 |
24 | {{-- リセットボタン --}} 25 |
26 | 27 |
28 | 29 | {{-- CSRFを防ぐためのトークンを隠しフィールドに埋め込むコードの生成 --}} 30 | {!! csrf_field() !!} 31 |
32 |
33 | @endsection 34 | -------------------------------------------------------------------------------- /resources/views/auth/register.blade.php: -------------------------------------------------------------------------------- 1 | {{-- 親ビューの指定 --}} 2 | @extends('layout') 3 | 4 | {{-- 以降の@sectionから、@endsectionまでの間が各セクションの内容となる --}} 5 | 6 | @section('title') 7 | ユーザー登録:UserモデルCRUDサンプル 8 | @endsection 9 | 10 | @section('content') 11 |

ユーザー登録

12 |
13 |
14 | 15 | {{-- nameフィールド --}} 16 |
17 | @if ($errors->has('name')) 18 |

{{ $errors->first('name') }}

19 | @endif 20 | 21 | 22 |
23 | 24 | {{-- emailフィールド --}} 25 |
26 | @if ($errors->has('email')) 27 |

{{ $errors->first('email') }}

28 | @endif 29 | 30 | 31 |
32 | 33 | {{-- passwordフィールド --}} 34 |
35 | @if ($errors->has('password')) 36 |

{{ $errors->first('password') }}

37 | @endif 38 | 39 | 40 |
41 | 42 | {{-- password_confirmationフィールド --}} 43 |
44 | @if ($errors->has('password_confirmation')) 45 |

{{ $errors->first('password_confirmation') }}

46 | @endif 47 | 48 | 49 |
50 | 51 | {{-- 登録ボタン --}} 52 |
53 | 54 |
55 | 56 | {{-- CSRFを防ぐためのトークンを隠しフィールドに埋め込むコードの生成 --}} 57 | {!! csrf_field() !!} 58 |
59 |
60 | @endsection 61 | -------------------------------------------------------------------------------- /resources/views/auth/reset.blade.php: -------------------------------------------------------------------------------- 1 | {{-- 親ビューの指定 --}} 2 | @extends('layout') 3 | 4 | {{-- 以降の@sectionから、@endsectionまでの間が各セクションの内容となる --}} 5 | 6 | @section('title') 7 | パスワードリセット:UserモデルCRUDサンプル 8 | @endsection 9 | 10 | @section('content') 11 |

パスワードリセット

12 | {{-- 13 | このフォームの表示URIが/password/reset/トークン に対して、その処理は 14 | POSTメソッドの/password/resetになる。同一ではないため、actionを指定する。 15 | --}} 16 |
18 |
19 | 20 | {{-- emailフィールド --}} 21 |
22 | @if ($errors->has('email')) 23 |

{{ $errors->first('email') }}

24 | @endif 25 | 26 | 27 |
28 | 29 | {{-- passwordフィールド --}} 30 |
31 | @if ($errors->has('password')) 32 |

{{ $errors->first('password') }}

33 | @endif 34 | 35 | 36 |
37 | 38 | {{-- password_confirmationフィールド --}} 39 |
40 | @if ($errors->has('password_confirmation')) 41 |

{{ $errors->first('password_confirmation') }}

42 | @endif 43 | 44 | 45 |
46 | 47 | {{-- 登録ボタン --}} 48 |
49 | 50 |
51 | 52 | {{-- 53 | メールから送られてきたパスワードリセットトークン。 54 | これによりメールを受け取った本人のみリセット可能で、 55 | 第三者によりリセットされないようにする。 56 | --}} 57 | 58 | 59 | {{-- CSRFを防ぐためのトークンを隠しフィールドに埋め込むコードの生成 --}} 60 | {!! csrf_field() !!} 61 |
62 |
63 | @endsection 64 | -------------------------------------------------------------------------------- /resources/views/emails/password.blade.php: -------------------------------------------------------------------------------- 1 | パスワードのリセットが要求されました。 2 | 3 | パスワードをリセットするためには、次のリンクをクリックしてください。 {!! url('password/reset/'.$token) !!} -------------------------------------------------------------------------------- /resources/views/emails/register.blade.php: -------------------------------------------------------------------------------- 1 | {{$name}}様、 2 | 3 | ユーザー登録されました。 4 | 5 | 管理者 -------------------------------------------------------------------------------- /resources/views/errors/401.blade.php: -------------------------------------------------------------------------------- 1 | {{-- 親ビューの指定 --}} 2 | @extends('layout') 3 | 4 | {{-- 以降の@sectionから、@endsectionまでの間が各セクションの内容となる --}} 5 | 6 | @section('title') 7 | 認証されていません 8 | @endsection 9 | 10 | @section('content') 11 |
12 |

認証されていません。(401)

13 | {{-- 14 | abortヘルパーでコードと共にメッセージが渡された場合は、それを優先し表示する。 15 | メッセージが指定されていない場合はデフォルトのメッセージを表示する。 16 | --}} 17 |

{{ $exception->getMessage() ? : 'このページにアクセスするには認証と資格が必要です。' }}

18 |
19 |
20 | {{-- トップページへ戻る --}} 21 | トップページへ戻る 22 |
23 | @endsection 24 | -------------------------------------------------------------------------------- /resources/views/errors/403.blade.php: -------------------------------------------------------------------------------- 1 | {{-- 親ビューの指定 --}} 2 | @extends('layout') 3 | 4 | {{-- 以降の@sectionから、@endsectionまでの間が各セクションの内容となる --}} 5 | 6 | @section('title') 7 | アクセスが拒否されました 8 | @endsection 9 | 10 | @section('content') 11 |
12 |

アクセスが拒否されました。(403)

13 | {{-- 14 | abortヘルパーでコードと共にメッセージが渡された場合は、それを優先し表示する。 15 | メッセージが指定されていない場合はデフォルトのメッセージを表示する。 16 | --}} 17 |

{{ $exception->getMessage() ? : 'アクセスできません。' }}

18 |
19 |
20 | {{-- トップページへ戻る --}} 21 | トップページへ戻る 22 |
23 | @endsection 24 | -------------------------------------------------------------------------------- /resources/views/errors/404.blade.php: -------------------------------------------------------------------------------- 1 | {{-- 親ビューの指定 --}} 2 | @extends('layout') 3 | 4 | {{-- 以降のsectionから、endsectionまでの間が各セクションの内容となる --}} 5 | 6 | @section('title') 7 | ページが見つかりません 8 | @endsection 9 | 10 | @section('content') 11 |
12 |

ページが見つかりません。(404)

13 | {{-- 14 | abortヘルパーでコードと共にメッセージが渡された場合は、それを優先し表示する。 15 | メッセージが指定されていない場合はデフォルトのメッセージを表示する。 16 | --}} 17 |

{{ $exception->getMessage() ? : '指定されたURLに該当するページが見つかりません。' }}

18 |
19 |
20 | {{-- トップページへ戻る --}} 21 | トップページへ戻る 22 |
23 | @endsection 24 | -------------------------------------------------------------------------------- /resources/views/errors/500.blade.php: -------------------------------------------------------------------------------- 1 | {{-- 親ビューの指定 --}} 2 | @extends('layout') 3 | 4 | {{-- 以降の@sectionから、@endsectionまでの間が各セクションの内容となる --}} 5 | 6 | @section('title') 7 | 内部エラーが発生しました 8 | @endsection 9 | 10 | @section('content') 11 |
12 |

内部エラーが発生しました。(500)

13 | {{-- 14 | abortヘルパーでコードと共にメッセージが渡された場合は、それを優先し表示する。 15 | メッセージが指定されていない場合はデフォルトのメッセージを表示する。 16 | --}} 17 | @if ($exception->getMessage()) 18 |

{{ $exception->getMessage() }}

19 | @else 20 |

内部的な障害のため、ただ今アクセスできません。

21 |

対策が完了するまで、しばらくお待ちください。

22 | @endif 23 |
24 |
25 | {{-- トップページへ戻る --}} 26 | トップページへ戻る 27 |
28 | @endsection 29 | -------------------------------------------------------------------------------- /resources/views/errors/503.blade.php: -------------------------------------------------------------------------------- 1 | {{-- 親ビューの指定 --}} 2 | @extends('layout') 3 | 4 | {{-- 以降の@sectionから、@endsectionまでの間が各セクションの内容となる --}} 5 | 6 | @section('title') 7 | サービスが利用できません 8 | @endsection 9 | 10 | @section('content') 11 |
12 |

サービスが利用できません。(503)

13 | {{-- 14 | abortヘルパーでコードと共にメッセージが渡された場合は、それを優先し表示する。 15 | メッセージが指定されていない場合はデフォルトのメッセージを表示する。 16 | --}} 17 | @if ($exception->getMessage()) 18 |

{{ $exception->getMessage() }}

19 | @else 20 |

一時的にアクセスが増大したか、サービスの運営に支障が生じています。

21 |

もうしばらくお待ちになり、後ほど再度お試しください。

22 | @endif 23 |
24 |
25 | {{-- トップページへ戻る --}} 26 | トップページへ戻る 27 |
28 | @endsection 29 | -------------------------------------------------------------------------------- /resources/views/front.blade.php: -------------------------------------------------------------------------------- 1 | {{-- 親ビューの指定 --}} 2 | @extends('layout') 3 | 4 | {{-- 以降の@sectionから、@endsectionまでの間が各セクションの内容となる --}} 5 | 6 | @section('title') 7 | トップページ:UserモデルCRUDサンプル 8 | @endsection 9 | 10 | @section('content') 11 |

トップページ

12 | 13 | @if(Auth::check()) 14 | {{-- 認証済み時(ログイン状態) --}} 15 |
16 | ようこそ、{{ Auth::user()->name }}さん。 17 |
18 | 19 |
20 | {{-- ログオフボタン --}} 21 | ログオフ 22 |
23 | @else 24 | {{-- 未認証時(ログオフ状態) --}} 25 |
26 | ようこそ、ゲストさん。 27 |
28 | 29 |
30 | {{-- ログインボタン --}} 31 | ログイン 32 | 33 | {{-- ユーザー登録ボタン --}} 34 | ユーザー登録 35 |
36 | @endif 37 | @endsection 38 | -------------------------------------------------------------------------------- /resources/views/layout.blade.php: -------------------------------------------------------------------------------- 1 | {{-- これはbladeのコメント記法で、レンダー後のHTMLには含まれない --}} 2 | {{-- 各ページ共通のレイアウト --}} 3 | 4 | 5 | 6 | 7 | {{-- 子のビューで指定される、titleセクションを読み込む --}} 8 | @yield('title') 9 | {{-- 10 | Laravelの表示関係では、ペジネーション(ページ付け)の 11 | ページリンクがBootstrap CSSフレームワーク互換となっている。 12 | そのためこのチュートリアルでも当初はBootstrapを採用したが 13 | コードが煩雑になるため、構造がより単純なPure CSSフレームワークを 14 | 今回は使用している。 15 | --}} 16 | 17 | 18 | 37 | 38 | 39 |
40 | {{-- 41 | 項目のバリデーションエラー以外のメッセージを表示する。 42 | statusキーは、Laravel組み込みのパスワードリセット機能で使われている。 43 | 今回は、他のメッセージ表示でもstatusキーを活用する。 44 | --}} 45 | @if(session('status')) 46 |
47 |

{{ session('status') }}

48 |
49 | @endif 50 |
51 | {{-- 子のビューで指定される、contentセクションを読み込む --}} 52 | @yield('content') 53 |
54 |
55 | 56 | 57 | -------------------------------------------------------------------------------- /resources/views/user-only.blade.php: -------------------------------------------------------------------------------- 1 | {{-- 親ビューの指定 --}} 2 | @extends('layout') 3 | 4 | {{-- 以降の@sectionから、@endsectionまでの間が各セクションの内容となる --}} 5 | 6 | @section('title') 7 | ユーザー専用:UserモデルCRUDサンプル 8 | @endsection 9 | 10 | @section('content') 11 |

ユーザー専用ページ

12 | 13 |
14 |

ようこそ、{{ Auth::user()->name }}さん。

15 |

ここは、認証(ログイン)済みの ユーザーさんしかご覧いただけないページです。

16 |
17 |
18 | {{-- ログオフボタン --}} 19 | ログオフ 20 |
21 | @endsection 22 | -------------------------------------------------------------------------------- /resources/views/user/edit.blade.php: -------------------------------------------------------------------------------- 1 | {{-- 親ビューの指定 --}} 2 | @extends('layout') 3 | 4 | {{-- 以降の@sectionから、@endsectionまでの間が各セクションの内容となる --}} 5 | 6 | @section('title') 7 | ユーザー情報編集:UserモデルCRUDサンプル 8 | @endsection 9 | 10 | @section('content') 11 |

ユーザー情報編集

12 | 13 |
14 | 15 | {{-- nameフィールド --}} 16 |
17 | @if ($errors->has('name')) 18 |

{{ $errors->first('name') }}

19 | @endif 20 | 21 | 23 |
24 | 25 | {{-- emailフィールド --}} 26 |
27 | @if ($errors->has('email')) 28 |

{{ $errors->first('email') }}

29 | @endif 30 | 31 | 33 |
34 | 35 | {{-- passwordフィールド --}} 36 |
37 | @if ($errors->has('password')) 38 |

{{ $errors->first('password') }}

39 | @endif 40 | 41 | 42 |
43 | 44 | {{-- 登録ボタン --}} 45 |
46 | 47 |
48 | 49 | {{-- CSRFを防ぐためのトークンを隠しフィールドに埋め込むコードの生成 --}} 50 | {!! csrf_field() !!} 51 |
52 | @endsection 53 | -------------------------------------------------------------------------------- /resources/views/user/index.blade.php: -------------------------------------------------------------------------------- 1 | {{-- 親ビューの指定 --}} 2 | @extends('layout') 3 | 4 | {{-- 以降の@sectionから、@endsectionまでの間が各セクションの内容となる --}} 5 | 6 | @section('title') 7 | ユーザー一覧表示:UserモデルCRUDサンプル 8 | @endsection 9 | 10 | @section('content') 11 |

ユーザー一覧表示

12 | 13 | {{-- ユーザーレコード一覧表示 --}} 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | @forelse($users as $user) 27 | 28 | 29 | 30 | 31 | 32 | 35 | 38 | 39 | @empty 40 | 41 | 42 | 43 | 44 | 45 | @endforelse 46 | 47 |
ID氏名メールアドレスハッシュ済みパスワード更新削除
{{ $user->id }}{{ $user->name }}{{ $user->email }}{{ $user->password }} 33 | 更新 34 | 36 | 削除 37 |
レコード未登録
48 | 49 | {{-- ページネーションリンク --}} 50 | {!! $users->render() !!} 51 | @endsection 52 | -------------------------------------------------------------------------------- /resources/views/vendor/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/laravel-jp-reference/chapter2/57ec1b2c84de2bf1c1c0715971c457f2b421edc7/resources/views/vendor/.gitkeep -------------------------------------------------------------------------------- /resources/views/welcome.blade.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Laravel 5 | 6 | 7 | 8 | 37 | 38 | 39 |
40 |
41 |
Laravel 5
42 |
43 |
44 | 45 | 46 | -------------------------------------------------------------------------------- /server.php: -------------------------------------------------------------------------------- 1 | 7 | */ 8 | $uri = urldecode( 9 | parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH) 10 | ); 11 | 12 | // このファイルはPHPの組み込みWebサーバーで、Apacheの"mod_rewrite"機能を 13 | // エミュレートするためのものです。これにより、Laravelアプリケーションをテストするために 14 | // 「本当」のWebサーバーソフトウェアをインストールしなくても済むようにしてくれます。 15 | if ($uri !== '/' && file_exists(__DIR__.'/public'.$uri)) { 16 | return false; 17 | } 18 | 19 | require_once __DIR__.'/public/index.php'; 20 | -------------------------------------------------------------------------------- /storage/app/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore -------------------------------------------------------------------------------- /storage/framework/.gitignore: -------------------------------------------------------------------------------- 1 | config.php 2 | routes.php 3 | compiled.php 4 | services.json 5 | events.scanned.php 6 | routes.scanned.php 7 | down 8 | -------------------------------------------------------------------------------- /storage/framework/cache/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore -------------------------------------------------------------------------------- /storage/framework/sessions/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /storage/framework/views/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /storage/logs/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /tests/ExampleTest.php: -------------------------------------------------------------------------------- 1 | visit('/') 12 | ->see('Laravel 5'); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /tests/TestCase.php: -------------------------------------------------------------------------------- 1 | make(Illuminate\Contracts\Console\Kernel::class)->bootstrap(); 22 | 23 | return $app; 24 | } 25 | } 26 | --------------------------------------------------------------------------------