Laravel5.6 メモ

・ローカルでの開発環境は、MacでHomesteadを利用
・本番サーバーはcentos7

## ログファイルを日付ごとに分ける

Laravel/.env

```
LOG_CHANNEL=daily
```
上記のように設定すると、下記のようなログファイルにログが出力される
Laravel/storage/logs/laravel-2018-07-25.log

## ディレクトリ指定してモデルを生成する

```
php artisan make:model Models/User
```

## ルーティングの一覧を確認するコマンド

```
php artisan route:list
```

```
vagrant@homestead:~/code/Laravel$ php artisan route:list
+--------+----------+------------------------+------------------+------------------------------------------------------------------------+------------+
| Domain | Method   | URI                    | Name             | Action                                                                 | Middleware |
+--------+----------+------------------------+------------------+------------------------------------------------------------------------+------------+
|        | GET|HEAD | /                      |                  | Closure                                                                | web        |
|        | GET|HEAD | api/user               |                  | App\Http\Controllers\UserController@index                              | api        |
|        | GET|HEAD | home                   | home             | App\Http\Controllers\HomeController@index                              | web,auth   |
|        | POST     | login                  |                  | App\Http\Controllers\Auth\LoginController@login                        | web,guest  |
|        | GET|HEAD | login                  | login            | App\Http\Controllers\Auth\LoginController@showLoginForm                | web,guest  |
|        | POST     | logout                 | logout           | App\Http\Controllers\Auth\LoginController@logout                       | web        |
|        | POST     | password/email         | password.email   | App\Http\Controllers\Auth\ForgotPasswordController@sendResetLinkEmail  | web,guest  |
|        | GET|HEAD | password/reset         | password.request | App\Http\Controllers\Auth\ForgotPasswordController@showLinkRequestForm | web,guest  |
|        | POST     | password/reset         |                  | App\Http\Controllers\Auth\ResetPasswordController@reset                | web,guest  |
|        | GET|HEAD | password/reset/{token} | password.reset   | App\Http\Controllers\Auth\ResetPasswordController@showResetForm        | web,guest  |
|        | GET|HEAD | register               | register         | App\Http\Controllers\Auth\RegisterController@showRegistrationForm      | web,guest  |
|        | POST     | register               |                  | App\Http\Controllers\Auth\RegisterController@register                  | web,guest  |
+--------+----------+------------------------+------------------+------------------------------------------------------------------------+------------+

```

## API通信にてCookieを使わずにセッションを使う

app/Http/Middleware/StartSession.php を新規作成して、「Illuminate\Session\Middleware\StartSession」を継承してgetSessionをオーバーライドする。

```php:StartSession.php
<?php

namespace App\Http\Middleware;

use Illuminate\Session\Middleware\StartSession as IlluminateStartSession;
use Illuminate\Http\Request;

class StartSession extends IlluminateStartSession
{
    public function getSession(Request $request)
    {
        return tap($this->manager->driver(), function ($session) use ($request) {
            // リクエストからセッションIDを取得
            // サンプルとしてヘッダー情報にセッションIDをそのまま入れてリクエストしている
            $session_id = $request->header('x-session-id');
            // セッションIDを設定
            $session->setId($session_id);
        });
    }
}
```

app/Http/Kernel.php に新規作成したStartSessionを追加

```php:Kernel.php
    protected $middlewareGroups = [
        'api' => [
            \App\Http\Middleware\StartSession::class,
            'throttle:60,1',
            'bindings',
        ],
    ];
```

app/Providers/SessionServiceProvider.php を新規作成し、「Illuminate\Session\SessionServiceProvider」を継承してregisterをオーバーライドする。

```php:SessionServiceProvider.php
<?php
namespace App\Providers;

use Illuminate\Session\SessionServiceProvider as BaseSessionServiceProvider;

class SessionServiceProvider extends BaseSessionServiceProvider
{
    /**
     * Register the service provider.
     *
     * @return void
     */
    public function register()
    {
        $this->registerSessionManager();

        $this->registerSessionDriver();

        $this->app->singleton('App\Http\Middleware\StartSession');
    }
}
```

config/app.php のprovidersに作成したものを追加する。

```php:app.php
    'providers' => [

        ...

        App\Providers\SessionServiceProvider::class,

    ],
```

## Nginxで正しくルーティングされずに404

ローカル環境では全然問題なかったんですが、本番サーバーでは、トップページは表示されるけど、apiのURLを叩くと404 Not Foundになってしまった。nginxの設定をする必要があったみたいで、この時はhttpsでの通信だったので下記ファイルを変更。
/etc/nginx/conf.d/https.conf

```https.conf
server {

        ... 略

        location ~ ^/api(/.*)$ {
                root [ドキュメントルートのパスを絶対パスを指定];
                fastcgi_pass   127.0.0.1:9000;
                fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME  $document_root/index.php;
                include        fastcgi_params;
        }
}
```


↓ このブログがとても参考になりました。
http://issasn.hatenablog.com/entry/2013/11/01/214812

## タスクスケジュール（定期処理）
↓artisanでcommandを作成
https://qiita.com/ritukiii/items/a70d89fa988b2d9afbc4

↓タスクスケジュールの設定
https://qiita.com/Takuma_Ikeda/items/1323e5a6bea51860ed57