Laravelでよく使うコマンドや実装についてまとめた記事です。 基本自分用メモですが、できるだけわかりやすく書こうと思います。 随時更新していく予定です、こういう使い方あるよ!という方はコメントいただけると嬉しいです。

uriの値を受け取り、画面に表示する。

$ vi routes/web.php

routeの設定

Route::get('hello/{id?}/{pass?}', 'HelloController@index');

Controllerの設定

$ php artisan make:controller HelloController 
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class HelloController extends Controller {
    public function index(Request $request) {
        $data = [
            'id' => $request->id,
            'pass' => $request->pass
        ];
        return view('hello.index', $data);
    }
}

Viewの設定

$ vi resources/views/hello/index.blade.php
<html>
<head>
  <title>Hello/Index</title>
</head>
<body>
  <article>
    <h2>ID, password</h2>
    <p>ID : {{$id}}</p>
    <p>PASS : {{$pass}}</p>
  </article>
</body>
</html>

API

LaravelでRestAPIをつくる

jsonを返す

class HelloController extends Controller {
    public function index(Request $request) {
        $response = array(
            "key1" => "value1",
            "key2" => "value2"
        );

        return \Response::json($response);
    }
}

Controllerでvalidateの実装

Laravel5.3でAPIを簡単に作ってみる

use Validator;

class HelloController extends Controller {
    public function post(HelloRequest $request) {
        Log::debug("HelloController post()");
        $validator = Validator::make($request->all(), [
            'name' => 'required',
            'mail' => 'email',
            'age'  => 'numeric|between:0,150',
        ]);
        // validator = Validator::make(値の配列、ルールの配列);
        // クエリ文字に適用する場合は $request->query()にする。

        // エラーが発生したらGETのページ/helloにリダイレクト。
        if ($validator->fails()) {
            return redirect('/hello')
                ->withErrors($validator)
                ->withInput();
        }

        /*
        // エラーが発生したら422レスポンス
        if ($validator->fails()) {
            return response()->json($validator->errors(), 422);
        }
        */
        return view('hello.index', ['msg' => '正しく入力されました!']);
    }
}

Requestによるvalidateの実装

laravel 5.5 - validateのドキュメント

Requestの追加

$ php artisan make:request HelloRequest

validateの設定

$ vi app/Http/Requests/HelloRequest.php
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class HelloRequest extends FormRequest {
    public function authorize() {
        // hello以外から利用できないようにする。
        if ($this->path() == 'hello') {
            return true;
        }
        return false;
    }

    public function rules() {
        return [
            'name' => 'required',
            'mail' => 'email',
            'age'  => 'numeric|between:0,150',
        ];
    }

    public function messages() {
        return [
            'name.required' => '名前は必ず入力して下さい。',
            'mail.email' => 'メールアドレスが必要です',
            'age.numeric' => '年齢を整数で記入下さい',
            'age.between' => '年齢は0〜150の間で入力下さい',
        ];
    }
}

Controllerの使用例

use App\Http\Requests\HelloRequest;

class HelloController extends Controller {
    // HelloRequestを引数にする。
    public function post(HelloRequest $request) {
        ...

        ...
    }
}

Route

キャッシュのクリア

$ php artisan route:cache

確認

$ php artisan route:list

Log

https://readouble.com/laravel/5.5/ja/errors.html

Logのネームスペース

use Illuminate\Support\Facades\Log;

Log出力

  Log::debug("test");

Logをtailで流す

$ tail -f storage/logs/laravel.log

Config

設定ファイルのサンプル

$ vi config/hello.php
<?php

return array(
    'greet' => array(
        "japan" => "こんにちは",
        "USA" => "hello"
    ),
    'path' => "test"
);

読み込み方法

use Config;
$read_conf = Config::get('hello.greet');
if (is_null($read_conf)) {
    echo "config file is nothin.";
} else {
    echo $read_conf["japan"];
}

configディレクトリ内にフォルダを作成してまとめたい場合

$ cat config/hello/greet.php
<?php

return array(
    'greet' => array(
        "japan" => "こんにちは",
        "USA" => "hello"
    ),
    'path' => "test"
);

同じく.で繋ぐことにより読み込める。

$read_conf = Config::get('hello.greet.greet');

キャッシュクリア

$ APP_ENV=local php artisan config:cache

Env

https://readouble.com/laravel/5.dev/ja/configuration.html

適用されている環境名(APP_ENV)の取得

$env = \App::environment();

適用されている環境で処理を分岐させる

if ($app->environment('local'))
{
    // 環境はlocal
}

if ($app->environment('local', 'staging'))
{
    // 環境はlocalかstaging
}

環境を変更する

$ APP_ENV=staging php artisan config:cache

DB

Configファイル

$ vi config/database.php
$ vi .env

ControllerでSQL実行

use Illuminate\Support\Facades\DB;

 ~~中略~~
    $items = DB::select('select * from people');
    return view('hello.index', ['items' => $items]);

Viewで表示

  @foreach ($items as $item)
    <div>
      {{$item->name}}
      {{$item->mail}}
      {{$item->age}}
    </div>
  @endforeach

Eloquent

https://readouble.com/laravel/5.5/ja/eloquent.html

Modelの作成

$ php artisan make:model Person

Controllerで読み込み

    $items = Person::all();

migrate

migrateの作成

$ php artisan make:migration create_people_table

migrateの実行

$ php artisan migrate

seed

seedの作成

$ php artisan make:seeder PeopleTableSeeder

seedの設定例

        $param = [
            'name' => 'taro',
            'mail' => 'taro@yamada.jp',
            'age'  => 12
        ];
        DB::table('people')->insert($param);

seedの実行

$ php artisan db:seed

test

$ vi tests/Feature/HelloTest.php

testの作成

namespace Tests\Feature;

use Tests\TestCase;
use Illuminate\Foundation\Testing\RefreshDatabase;

class HelloTest extends TestCase
{
    /**
     * A basic test example.
     *
     * @return void
     */
    public function testHello()
    {
        $this->assertTrue(true);

        $arr = [];
        $this->assertEmpty($arr);

        $msg = "Hello";
        $this->assertEquals('Hello', $msg);

        $n = random_int(0, 100);
        $this->assertLessThan(100, $n);

        $response = $this->get('/');
        $response->assertStatus(200);
    }
}

実行

$ vendor/bin/phpunit