Laravel を試してみる

#はじめに
日本でのLaravelの認知度も上がってきており、業務での使用も拡大しつつあるようです。

ネットでは、すでに初心者向けの記事が多数存在しますが、それはそれとして、、、

自分なりに確認しながらその記録を残しておくことにします。

どちらかというと、自分をいろんな意味でレベルアップさせるために書いたので、
つまらない内容かもしれませんが、ご了承ください。

ただ、初めてlaravelをやってみようとという人に限定すれば、
ほんの少しは参考になる可能性もあります。
記載内容に間違えがあったらごめんなさい。

インストール後に、実際に作成してみるプロジェクトは、
簡単な応募フォームの導入部分のみを試すものにします。

・入力項目　⇒　名前のテキストフィールド
・ボタンは　⇒　登録ボタン

テキストを入力して登録ボタンを押すと、DBに名前のデータが格納される。
ただ、それだけの超シンプルなものです。

##インストール
自PCの環境
- Windows10
- PHP7
- Mysql

１．composer
自分のPCには以前から既に入れていたので、ここでは特になにもしてないですが、
https://getcomposer.org/doc/00-intro.md#installation-windows
ここからダウンロードしたものをインストールすればよさそうです。

２．laravelのインストーラを準備
composer global require "laravel/installer"

DOS窓でこれを入力するだけ。
![laravel11.jpg](https://qiita-image-store.s3.amazonaws.com/0/287208/e4efc3aa-e52a-ec83-9b8a-95b8ecbe19f1.jpeg)


## プロジェクト生成
３．laravelコマンドを使ってプロジェクト生成
laravel new entry

composer create-projectによる作成方法もあるようですが、
とりあえずlaravelコマンドで実施。

![laravel22.jpg](https://qiita-image-store.s3.amazonaws.com/0/287208/decbea56-fe4d-4c51-52a4-c3925794af29.jpeg)


C:\project_xampp\htdocs\laravel55\
ここをカレントディレクトリとして実行したら、この配下にentryというディレクトリが生成され、
中をみると多数ファイルやフォルダが出来ていた。
（laravel5.7を試してるのに間違ってlaravel55というフォルダ名にしてしまった！）

![laravel25.jpg](https://qiita-image-store.s3.amazonaws.com/0/287208/d38d72a4-bbc4-7f62-e285-08f098ad85e2.jpeg)



４．ドキュメントルートの設定
自PC上のhttpd.confを編集（抜粋）
<pre>
 DocumentRoot "C:\project_xampp\htdocs\laravel55\entry\public"
 \<Directory "C:\project_xampp\htdocs\laravel55\entry\public"\>
</pre>

## 初期表示確認
５．ブラウザで<pre>http://localhost</pre>を実行
初期画面があっさり表示される。
インストール完了！

![laravel44.jpg](https://qiita-image-store.s3.amazonaws.com/0/287208/23f305e4-dc97-bce2-f1ef-06a001f97fd6.jpeg)
これは、下記テンプレートファイルが表示さているようである。
/entry/resources/view/welcome.blade.php

## データベース準備

DB環境を整える。ますはDBを作成。
自分のPCには既にMySQLが入っているので、それを使ってみる。
入ってない人はPostgreSQLでもいいので事前に使える環境にしておく必要がありますが、
そのあたりはここでは割愛します。
まずは、テスト用のデータベースを作成。

お試しなんで、
$mysql -u root
でログインし、
mysql> create database laraveldb;
とでもして、データベース作成完了。

## laravelのDB環境を設定
/entry/.env
というファイルがあるので、それを編集する。

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laraveldb  <-----これ（DB名）
DB_USERNAME=root       <-----これ（DBアカウント）
 #DB_PASSWORD=secret

上記設定で終わり

## モデルやコントローラを準備

カレントディレクトリを
/entry
にして、

php artisan make:model Entry -m -c -r

とりえあず、上記をそのまま実行！

すると、

・マイグレーションファイル
/entry/database/migrations/2018_10_30_075410_create_entries_table.php

・モデル
/entry/app/Entry.php

・コントローラ
entry/app/Http/Controllers/EntryController.php

が自動で生成されるようだ！

## DBにカラムを追加

/entry/database/migrations/2018_10_30_075410_create_entries_table.php
このファイルの中を見てみると、既にidと日時のがセットされていたので、
<pre>
    public function up()
    {
        Schema::create('entries', function (Blueprint $table) {
            $table->increments('id');
            $table->increments('name');  <----これ
            $table->timestamps();
        });
    }
</pre>

のようにnameを追加する。

そして、

php artisan migrate

を実行！

MySLQのDB（laraveldb）の中をのぞいてみたら、テーブルが作成されていた！

MariaDB [(none)]> use laraveldb;
Database changed
MariaDB [laraveldb]> show tables;
<pre>
+---------------------+
| Tables_in_laraveldb |
+---------------------+
| entries             |
| migrations          |
| password_resets     |
| users               |
+---------------------+
4 rows in set (0.00 sec)

+------------+------------------+------+-----+---------+----------------+
| Field      | Type             | Null | Key | Default | Extra          |
+------------+------------------+------+-----+---------+----------------+
| id         | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| name       | varchar(191)     | NO   |     | NULL    |                |
| created_at | timestamp        | YES  |     | NULL    |                |
| updated_at | timestamp        | YES  |     | NULL    |                |
+------------+------------------+------+-----+---------+----------------+
4 rows in set (0.01 sec)
</pre>


## ルート設定

/entry/routes/web.php

このファイルを、下記のように修正する
<pre>
Route::get('/', function(){return redirect('/entries');});
Route::post('/entries', 'EntryController@store');
</pre>

## コントローラ設定


/entry/app/Http/Controllers/EntryController.php

    public function store(Request $request)
    {
        $entry = new Entry;
        $entry->name = request('name');
        $entry->save();
        return redirect('/entries');
    }
    
これを追加


## ビューの作成
resources/views/entries.blade.php"

```
@extends('layout')

@section('content')
<h1>応募フォーム</h1>
<form action="/entries" method="POST">
    {{ csrf_field() }}
    <label for="entry">名前</label>
    <input type="text" name="name" id="entry-name">
    <button type="submit">登録</button>
</form>
@endsection
```

※{{ csrf_field() }}
　　　↑　これは、CSRF対策としてトークンを埋め込むために必要のようだ。

## モデルファイル
app/Entry.php
特に手は入れない


## 動作確認

<pre>
http://localhost/entries
</pre>
![laravel88.jpg](https://qiita-image-store.s3.amazonaws.com/0/287208/b455419f-791b-e8c9-329c-fa88be64cbc6.jpeg)


taroと入力して登録ボタンを押した後、
DBの中身を確認してみる。

<pre>
MariaDB [laraveldb]> select * from entries;
+----+------+---------------------+---------------------+
| id | name | created_at          | updated_at          |
+----+------+---------------------+---------------------+
|  1 | taro | 2018-10-31 11:59:41 | 2018-10-31 11:59:41 |
+----+------+---------------------+---------------------+
1 row in set (0.00 sec)
</pre>

taro　と登録されていた

次回以降の予定ですが、
バリデーションの実装
確認、完了画面の実装
と進んでみようと思います。

おわり