# Laravel 01 復習 + 追加ワーク --- ## 環境構築 ### ① サーバーの作成 下記設定で、「新規サーバー作成」 :::info サーバ名:デフォルトでOK web開発:PHP,Laravel データベース:MySQL,phpMyAdmin その他は設定不要 ::: ### ② Laravelプロジェクトの作成 1. ターミナル上でLaravelプロジェクト作成コマンドを入力 `composer create-project laravel/laravel cms 6.* --prefer-dist` 2. プロジェクトディレクトリに移動 `cd cms` 3. Composerコマンドを実行 `sudo composer update` 4. BuiltInのLaravelサーバーを起動 `php artisan serve` 5. 動作確認 `Starting Laravel development server: http://127.0.0.1:8000 ` とターミナル上で表示され、ブラウザ(8000番ポート)をクリックしてLaravelのホーム画面が表示されていれば成功! ### ③ データベース作成&接続 1. データベースを作成 * phpMyAdminで作成する場合 ①左タブからphpMyAdminのタブ内「Open phpMyAdmin」をクリック ②phpMyAdminの管理画面で `c9` というDBを作成 ※照合順は`utf8mb4_general_ci`を選択 * ターミナルでDB作成する場合 ターミナル上で下記の手順で実行 ``` mysql -u root -p root [Enterキー] create database c9; exit; ``` 2. 隠しファイルを表示 エディタ左側のファイル階層で右クリック→「隠しファイルを表示」 3. .envファイルを編集 cms直下にあるenvファイル内の同じファイルを上書き ``` DB_CONNECTION=mysql DB_HOST=localhost DB_PORT=3306 DB_DATABASE=c9 DB_USERNAME=root DB_PASSWORD= ``` 4. Webサーバーを再起動 超重要!!!**.envを変更後はWebサーバーを再起動**する ``` # 起動中のwebサーバーを停止 Ctl + C # cmsディレクトリにいることを確認後、サーバー起動 php artisan serve ``` ### ④ Laravelの/app/Providers/AppServiceProvider.php ファイルを修正 ```php use Illuminate\Support\Facades\URL; //この行を追加 public function boot() { URL::forceScheme('https'); //この行を追加 } ``` --- ## ログイン認証 1. マイグレーションを実行(cmsディレクトリにいるか確認!) `php artisan migrate` 2. laravel/ui パッケージをインストール `composer require laravel/ui:^1.0 --dev` 3. artisan コマンドを実行 `php artisan ui vue --auth` 4. npmパッケージをインストール `npm install` 5. パッケージをビルド `npm run dev` --- ## 【CRUD】①DBのテーブルを作成 (マイグレーションファイルの作成と実行) 1. booksテーブルを作成(マイグレーションファイル作成) `php artisan make:migration create_books_table --create=books` 2. database/migrationsの直下のbooks_table.phpに以下追記 ```php public function up() { Schema::create('books', function (Blueprint $table) { $table->bigIncrements('id'); $table->string('item_name'); //追加 $table->integer('item_number'); //追加 $table->integer('item_amount'); //追加 $table->date('published'); //追加 $table->timestamps(); }); } ``` 3. マイグレーションを実行(テーブル作成) ターミナル上でコマンド実行 ``` php artisan migrate ``` 4. phpMyAdminでテーブルが作成されているか確認 ## 【CRUD】② Modelを作成(テーブルを簡単に扱えるようにする機能) 1. ターミナルでコマンドを実行 ``` php artisan make:model Book ``` 2. /app/Book.php に作成されたことを確認 ## 【CRUD】③ Viewを作成(登録&表示のためのページ) 1. /resources/views/books.blade.php を作成 以下コードを貼り付け ```htmlmixed @extends('layouts.app') @section('content') <!-- Bootstrapの定形コード… --> <div class="card-body"> <div class="card-title"> ブックマーク </div> <!-- ↓バリデーションエラーの表示に使用--> <!-- ↑バリデーションエラーの表示に使用--> <!-- 本登録フォーム --> <form action="{{ url('books') }}" method="POST" class="form-horizontal"> @csrf <!-- 本のタイトル --> <div class="form-group col-md-6"> <label for="item_name" class="col-sm-3 control-label">タイトル</label> <input type="text" name="item_name" class="form-control" id="item_name"> </div> <!-- 本 登録ボタン --> <div class="form-group"> <div class="col-sm-offset-3 col-sm-6"> <button type="submit" class="btn btn-primary"> Save </button> </div> </div> </form> </div> <!-- Book: 既に登録されてる本のリスト --> @endsection ``` ## 【CRUD】④ ルーティング 1. /routes/web.phpに以下の記述を追加 先頭部 ```php use App\Book; use Illuminate\Http\Request; ``` 中間 ```php // 本のダッシュボード表示(books.blade.php) Route::get('/', function () { return view('books'); //** ここを修正 ** }); // ↓ここから追加 // 新「本」を追加 Route::post('/books', function (Request $request) { // }); // 本を削除 Route::delete('/book/{book}', function (Book $book) { // }); ``` 2. プレビュー画面で確認 無事に本のタイトルを入力するフォームが表示されていればOK ![](https://i.imgur.com/zDHgz5E.png) ## 【CRUD】⑤ CRUD機能実装(登録) 1. /routes/web.phpを編集 ```php // 新「本」を追加 Route::post('/books', function (Request $request) { $books = new Book; $books->item_name = $request->item_name; $books->item_number = '1'; // 今は固定値で登録 $books->item_amount = '1000'; //今は固定値で登録 $books->published = '2017-03-07 00:00:00'; //今は固定値で登録 $books->save(); return redirect('/'); }); ``` 2. formを送信した後にDBに登録処理ができているか、phpMyAdminで確認 ## 【CRUD】⑥ CRUD機能実装(表示) 1. /routes/web.phpを編集 ```php Route::get('/', function () { $books = Book::orderBy('created_at', 'asc')->get(); return view('books', [ 'books' => $books ]); //return view('books',compact('books')); //も同じ意味 }); ``` 2. /resources/views/books.blade.php < !-- Book: 既に登録されてる本のリスト -->の下に追加 ```htmlmixed <!-- 現在の本 --> @if (count($books) > 0) <div class="card-body"> <table class="table table-striped task-table"> <!-- テーブルヘッダ --> <thead> <th>本一覧</th> <th>&nbsp;</th> </thead> <!-- テーブル本体 --> <tbody> @foreach ($books as $book) <tr> <!-- 本タイトル --> <td class="table-text"> <div>{{ $book->item_name }}</div> </td> <!-- 本: 削除ボタン --> <td> </td> </tr> @endforeach </tbody> </table> </div> @endif ``` 3. プレビュー画面で、一覧表示できているか確認 --- ## 【CRUD追加ワーク】 入力/表示項目を追加 追加ワークとして、今まで1つだけだった登録formの項目を増やしてみましょう :::success ステップ ① viewでinputタグを追加 ② Routing[web.php]に記載している登録処理の固定値を変更 ③ viewで一覧表示するカラムを追加 ::: ### ① viewでinputタグを追加 今は「本のタイトル」しか入力項目がありません。 「金額(item_amount)、数(item_number)、公開日(published)」の3項目を追加しましょう 1. view(books.blade.php)を編集 <-- 本登録フォーム -->の<form>タグを上書き ```htmlmixed <!-- 本登録フォーム --> <form action="{{ url('books') }}" method="POST" class="form-horizontal"> @csrf <!-- 本のタイトル --> <div class="form-group col-md-6"> <label for="item_name" class="col-sm-3 control-label">タイトル</label> <input type="text" name="item_name" class="form-control" id="item_name"> </div> <!-- 冊数 --> <div class="form-group col-md-6"> <label for="item_number" class="col-sm-3 control-label">冊数</label> <input type="text" name="item_number" class="form-control" id="item_number"> </div> <!-- 金額 --> <div class="form-group col-md-6"> <label for="item_amount" class="col-sm-3 control-label">金額</label> <input type="text" name="item_amount" class="form-control" id="item_amount"> </div> <!-- 公開日 --> <div class="form-group col-md-6"> <label for="published" class="col-sm-3 control-label">公開日</label> <input type="date" name="published" class="form-control" id="published"> </div> <!-- 本 登録ボタン --> <div class="form-group"> <div class="col-sm-offset-3 col-sm-6"> <button type="submit" class="btn btn-primary"> Save </button> </div> </div> </form> ``` 2. プレビュー画面で入力フォーム数が増えているか確認 ![](https://i.imgur.com/eOMcGX1.png) ### ② Routing[web.php]に記載している登録処理の固定値を変更 ①でviewを編集し、/booksへPOSTする値を4つ(item_name,item_amount, item_number, published)に増やしました。 次は実際に追加した3つの値をweb.phpで受け取り、DBに登録をしましょう。 1. routes(web.php)の登録処理の部分を編集 ```php Route::post('/books', function (Request $request) { // Eloquentモデル(登録処理) $books = new Book; $books->item_name = $request->item_name; $books->item_number = $request->item_number; //ここを変更 $books->item_amount = $request->item_amount; //ここを変更 $books->published = $request->published; //ここを変更 $books->save(); return redirect('/'); }); ``` 2. 実際にDBに登録できるか確認 プレビュー画面で4項目入力 → phpMyAdminでテーブルに値が入っているか確認しましょう --- :::success これでLaravel01の復習は終わりです。おつかれ様でした! :raised_hands::raised_hands::raised_hands: :::