(メモ) Laravel 5.3入門

* ubuntu16.04にて実施

## php7とcomposer取得

```bash:php7取得
apt-get install -y \
  php7.0 \
  php7.0-sqlite3 \
  php7.0-mbstring \
  php7.0-xml \
  php7.0-mysql \
  composer
```

## project作成

```bash:しばらく待つ
composer create-project laravel/laravel test
cd test
```

## databaseの設定

* [初めてのLaravel 5.1 : (7) マイグレーションでDBのバージョン管理 – ララ帳](https://laravel10.wordpress.com/2015/02/25/%E5%88%9D%E3%82%81%E3%81%A6%E3%81%AElaravel-5-6-%E3%83%9E%E3%82%A4%E3%82%B0%E3%83%AC%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%A7db%E3%81%AE%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E7%AE%A1/)

```diff:.env
- DB_CONNECTION=mysql
+ DB_CONNECTION=sqlite
```

```bash:最初からmigrationファイルが用意されている
$ ls database/migrations -1
2014_10_12_000000_create_users_table.php
2014_10_12_100000_create_password_resets_table.php
```

```bash:migrate実施
$ php artisan migrate
Migration table created successfully.
Migrated: 2014_10_12_000000_create_users_table
Migrated: 2014_10_12_100000_create_password_resets_table
```

```bash:テーブルが作成されていることを確認
$ echo ".tables" | sqlite3 homestead 
migrations       password_resets  users
```

```bash:migrations履歴を確認
$ echo "select * from migrations;" | sqlite3 homestead
2014_10_12_000000_create_users_table|1
2014_10_12_100000_create_password_resets_table|1
```

```bash:DB接続確認
$ php artisan tinker
>>> App\User::all()->toArray();
=> []
```


## routingとトップページの編集

```
php artisan serve --port 8888 --host 0.0.0.0
```

* http://localhost:8888 にアクセス

![1.png](https://qiita-image-store.s3.amazonaws.com/0/25728/573ec1df-f677-7bca-32c1-5a4070fc47c3.png)

```php:routes/web.php
Route::get('/', function () {
    return view('welcome');
});
```

```diff:resources/views/welcome.blade.php
    <body>
        <div class="container">
            <div class="content">
-              <div class="title">Laravel 5</div>
+              <div class="title">Laravel 5です</div>
            </div>
        </div>
    </body>
```

![2.png](https://qiita-image-store.s3.amazonaws.com/0/25728/c02b547a-cbda-85f5-0e38-98fd8660f4d8.png)

```bash:routing一覧表示
$ php artisan route:list
+--------+----------+-----+------+---------+------------+
| Domain | Method   | URI | Name | Action  | Middleware |
+--------+----------+-----+------+---------+------------+
|        | GET|HEAD | /   |      | Closure | web        |
+--------+----------+-----+------+---------+------------+
```

----

## 本番にUPするときの注意点

```bash:storage以下にapacheからの書き込み権限が必要
sudo chmod -R 777 storage
```

```apache:.htaccessを有効にするには
AllowOverride All
```

* DocumentRoot直下に置くのであれば楽だが、ディレクトリを切って置く場合はformのaction部分とdatabaseのPATHの修正が必要になると思います。

* デバッグメッセージを無効にする

```diff:.env
- APP_DEBUG=true
+ APP_DEBUG=false
```

----


## laravelコマンドのインストール

```
composer global require "laravel/installer"
```

* ~/.config/composer/vendor/bin/laravel がインストールされる。
* `laravel new `コマンドにはphp7.0-zipが必要。

```bash:
sudo apt-get install -y \
  php7.0-zip
```

----


### チュートリアルの画面を確認

* [基本のタスクリスト 5.1 Laravel](http://readouble.com/laravel/5/1/ja/quickstart.html#installation)

```bash:
git clone https://github.com/laravel/quickstart-basic quickstart
cd quickstart
composer install
```

```diff:.env
+ DB_CONNECTION=sqlite
```

```bash:migration
touch database/database.sqlite
php artisan migrate
php artisan serve
```

![1.png](https://qiita-image-store.s3.amazonaws.com/0/25728/60b0fd25-defb-98a4-7abe-039729d6de42.png)

## dockerで動かす

* [geshan/laravel-alpine](https://hub.docker.com/r/geshan/laravel-alpine/)を使った。

```bash:
docker run --rm -p 8000:8000 \
  -v $(pwd):/var/www geshan/laravel-alpine:sqllite \
  "php artisan serve --host 0.0.0.0"
```

![1.png](https://qiita-image-store.s3.amazonaws.com/0/25728/a6996086-e511-fcd1-5e5f-f4058254612b.png)


## docker-composeで動かす

* [laravel-docker-compose/docker-compose.yml](https://github.com/showcheap/laravel-docker-compose/blob/master/docker-compose.yml)
* laravel のプロジェクトフォルダ内に入れる。

```rb:docker-compose.yml
version: '2'
services:

  web:
    image: eboraas/laravel
    volumes:
        - .:/var/www/laravel
    ports:
        - "8080:80"
    depends_on:
        - database
    links:
        - database
    restart: always
    environment:
        - DB_HOST=database

  database:
      #image: mariadb
      image: mysql:8
      ports:
          - 3306:3306
      restart: always
      volumes:
          - ./mysql:/var/lib/mysql
      environment:
          - MYSQL_ROOT_PASSWORD=root
          - MYSQL_DATABASE=homestead
          - MYSQL_USER=root
          - MYSQL_ALLOW_EMPTY_PASSWORD=yes
```

```bash:database
mysql -uroot -proot -h 127.0.0.1
```

```bash:web
# ログ
tail /var/log/apache2/error.log

# 書き込み権限
chown -R www-data:www-data ./storage/logs/
```

* http://localhost:8080/

トップページが見れることを確認。

### ファイルの準備

```bash:composer
curl -O https://getcomposer.org/composer.phar
mv composer.phar /usr/local/bin/composer
chmod +x /usr/local/bin/composer
```

```bash:project
composer create-project laravel/laravel prj-laravel
cd prj-laravel
```

```diff:.env
 DB_CONNECTION=mysql
 DB_HOST=127.0.0.1
 DB_PORT=3306
+DB_DATABASE=homestead
+DB_USERNAME=root
+DB_PASSWORD=root
```

```bash:
php artisan migrate
php artisan serve --port 8888 --host 0.0.0.0

# route
routes/web.php
# view
./resources/views/welcome.blade.php
```