laravel関係の細かいメモ。お勉強しながら更新なので随時更新する予定。

よく使うartisanコマンド

命名規則は個人的な趣味です。

php artisan migrate
DBマイグレーションの実行。実行はサーバ上(Homestead上)で
php artisan make:migration create_[table_name]_table --create=[table_name]
テーブル作成マイグレーション。[table_name]は複数形を使用する(users,tasks等)。スネークケースを使う
php artisan make:seeder [TableName]Seeder
シーダー作成[TableName]はデータをセットするテーブル名をキャメルケースにしたもの(Users,TableNames等)。
小規模なマスターデータとかは、既存のDatabaseSeederを使うといいと思う。
php artisan make:model [ModelName]

モデルを生成する。モデル名には単数形を使う(User,Task等)
php artisan make:controller HogeHogeController –plain

コントローラを作成。コントローラー名は主に取り扱う対象(単数)に”Controller”をつける(UserController,TaskController等)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
    <h3>
      viewは?
    </h3>

    <p>
      modelとcontrollerはスキャフォールディングできるんだから、viewも…というわけにはいかず、viewは地道にファイルを追加しないといかんみたい。<br /> パスは resources/views/<em>[models]</em>/index.blade.php みたいな感じ。
    </p>

    <h3>
      ヘルパークラスを作る
    </h3>

    <p>
      bladeで使えるヘルパ関数。グローバルでなくクラスのスタティックメソッドで実装。<br /> HTML関係のヘルパはクライアントサイドのフレームワークと競合しないように、なるべく細かい出力を作るだけに専念した方がいいような気がする。
    </p>

    <h4>
      クラス本体
    </h4>

    <p>
      ファイルの追加はapp/Helpers/に<br /> サンプルとしてapp/Helpers/HtmlHelper.php
    </p>

    ```php

<?php namespace App\Helpers; use App\SelectOption;

class HtmlHelper { public static function Selected(SelectOption $option){ if( !old($option->name) ){ return ($option->selected ? “selected”:“”); } else { return (old($option->name)==$option->value ? “selected”:“”); } } }

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
        <p>
          処理内容はともかくとして、クラスとスタティックメソッドを作ります。
        </p>

        <h4>
          composer.json
        </h4>

        ```jscript

    "autoload": {
        "files": [
            "app/Helpers/HtmlHelper.php"   //<-追加
        ],
    },
1
2
3
4
5
    <p>
      編集したら反映させる
    </p>

    ```bash

$ composer dump-autoload

1
2
3
4
5
6
7
8
9
        <h4>
          config/app.php
        </h4>

        ```php

    'aliases' => [
         'HtmlHelper'=> App\Helpers\HtmlHelper::class,   //<-追加
    ],
1
2
3
4
5
    <h4>
      bladeで使う
    </h4>

    ```xml

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
        <h3>
          git clone後
        </h3>

        <p>
          laravelプロジェクトをgit cloneした後は依存するライブラリや機密情報等がない状態なので
        </p>

        <p>
          $ composer install<br /> &#8220;.env.example&#8221;をコピーして.envファイルを作成・編集<br /> $ php artisan key:generate
        </p>

        <p>
          しときます。
        </p>

        <p>
          上記をやっとかないと<br /> Whoops, looks like something went wrong.<br /> とか<br /> No supported encrypter found. The cipher and / or key length are invalid.<br /> とかいわれます。
        </p>

        <h3>
          PHPUnit
        </h3>

        <p>
          project> vendor/bin/phpunit
        </p>

        <h3>
          Model(とか)のプロパティ
        </h3>

        <p>
          チュートリアルやドキュメントを見ていると何の説明もなしに <a href="http://readouble.com/laravel/5/1/ja/quickstart-intermediate.html#eloquent-models" target="_blank">$fillable</a> や <a href="http://readouble.com/laravel/5/1/ja/eloquent.html#eloquent-model-conventions" target="_blank">$table</a> とか出てきて、なにこれ?ってなります。<br /> <a href="http://laravel.com/api/5.0/Illuminate/Database/Eloquent/Model.html" target="_blank">APIリファレンス</a>見ても何も出てないんですよね。<br /> ソース読めってことでしょうか?<br /> vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php<br /> 不親切な感じがしますが、コメントがしっかりしているので、リファレンスに使えます。
        </p>

        <h3>
          Homestead
        </h3>

        <h4>
          MySQLのパスワード
        </h4>

        <p>
          vagrant@homestead:~$ mysql -uroot -psecret
        </p>

        <h3>
          try catchが効かない
        </h3>

        <p>
          こんな感じで「エラーが出たらとにかくリダイレクト」みたいな処理を書いたんだけど、catchが反応せず。
        </p>

        ```php

        try{
            $provider_user = Socialite::with($provider)->user();    //driver
        } catch (Exception $e) {
            return redirect()->route('auth.login')->withErrors(['message'=>'ログインできませんでした']);
        }