Laravel で Service を使う

次の記事と同じことを、Laravel5.6 で行いました。
[Laravel5.4でServiceを使ったプロジェクト構成](https://qiita.com/minechan1234/items/2cc7c69875fafb2fdae9)

MariaDB の設定は、次と同じです。
[Laravel で MariaDB の CRUD (その 1)](https://qiita.com/ekzemplaro/items/3cf92cac872987f2f857)

1) プロジェクトの作成

```bash
laravel new project_1
```

2) MariaDB を使う為の修正
>app/Providers/AppServiceProvider.php を編集

```php:app/Providers/AppServiceProvider.php
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Schema;  // 追加
class AppServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        Schema::defaultStringLength(191);   // 追加
    }
// 略
```

3) .env の設定 (MariaDB の接続情報)

```text
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=article
DB_USERNAME=scott
DB_PASSWORD=tiger123
```

4) モデルを入れるフォルダーの作成

```bash
mkdir app/Models
```

5) モデルとマイグレーションを作成

```bash
php artisan make:model Models/Hoge -m
```

>database/migrations/2018_06_25_101244_create_hoges_table.php が出来る

6) database/migrations/2018_06_25_101244_create_hoges_table.php を編集

```php:database/migrations/2018_06_25_101244_create_hoges_table.php
// 略
    $table->increments('id');
    $table->string('hoge'); // 追加
    $table->timestamps();
// 略
```

7) migrateしてテーブルを作成

```bash
php artisan migrate
```

>次のテーブルができます。

```text
MariaDB [city]> show tables;
+-----------------+
| Tables_in_city  |
+-----------------+
| hoges           |
| migrations      |
| password_resets |
| users           |
+-----------------+
```

8) 出来たテーブルにデータを入れます。

```text
MariaDB [city]> insert into hoges set id='10',hoge='aaa';
Query OK, 1 row affected (0.07 sec)

MariaDB [city]> insert into hoges set id='11',hoge='bbb';
Query OK, 1 row affected (0.06 sec)

MariaDB [city]> insert into hoges set id='12',hoge='ccc';
Query OK, 1 row affected (0.07 sec)
```

9) app/Models/Hoge.php の編集

```php:app/Models/Hoge.php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Hoge extends Model
{
    protected $fillable = [     // 追加
        'hoge'          // 追加
    ];                  // 追加
}
```

10) サービスを入れるフォルダーの作成

```bash
mkdir app/Services
```

11) app/Services/HogeService.php を作成

```php:app/Services/HogeService.php
<?php
namespace App\Services;
use App\Models\Hoge;
class HogeService{
    public function getHoge(){
        return Hoge::all();
    }
}
```

12) app/Providers/AppServiceProvider.phpのregisterに追加

```php:app/Providers/AppServiceProvider.php
// 略
public function register()
    {
        $this->app->bind('App\Services\HogeService');
    }
// 略
```

13) ルートの作成
> routes/web.phpに以下を追加

```php:routes/web.php
// 略
Route::resource('hoge', 'HogeController');
```

14) コントローラーの作成

```bash
php artisan make:controller HogeController
```

15) app/Http/Controllers/HogeController.php を編集

```php:app/Http/Controllers/HogeController.php
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Services\HogeService;
class HogeController extends Controller
{
protected $hogeService;
    public function __construct(HogeService $hoge_service)
    {
        $this->hogeService = $hoge_service;
    }

    public function index(Request $request)
    {
        $hoges = $this->hogeService->getHoge();
        return view('hoge.index', compact('hoges'));
    }

    public function show($id){}
}
```

15) ビューを入れるフォルダーの作成

```bash
mkdir resources/views/hoge
```

16) resources/views/hoge/index.blade.php を作成

```php:resources/views/hoge/index.blade.php
<!DOCTYPE html>
<html>
<head></head>
<body>
<h1>Hello World!</h1>
@foreach($hoges as $hoge)
<p>{{$hoge->hoge}}</p>
@endforeach
Jun/25/2018<p />
</body>
</html>
```

17) サーバーの起動

```bash
php artisan serve
```

18) ブラウザーで http://localhost:8000/hoge にアクセス
![service_jun2501.png](https://qiita-image-store.s3.amazonaws.com/0/179446/9ea819cf-bcb7-f392-276e-c6c1f52fc006.png)