#開発準備
Laravelプロジェクトの作成を行う
composer create-project laravel/laravel <<プロジェクト名>> --prefer-dist
#開発基本情報
##処理の流れ
- ブラウザでURLを指定
-
App/Http/routes.php
からコントローラーに送る - 受け取った
App/Http/Controllers/XXXXController.php
で処理を行い、ビューに送る -
resources/views/XXXX.blade.php
をブラウザに表示する
チュートリアルでは上記の流れで処理を行う
また、App/Http/routes.php
に直接処理が書かれていたりするが
非推奨らしい
コントローラーはHttp層までの責任を負うため、
データの登録や更新処理はモデルで行うはず
そのため、マスターの登録画面だと以下の流れになる?
- データの入力を行い、登録ボタンを押す
-
App/Http/routes.php
からコントローラーに送る - コントローラーで入力チェック(必須チェックや文字数など)を行い、モデルに送る
- モデルで入力チェック(必須チェックや文字数など)+整合性チェック(重複チェックなど)を行う
- モデルでデータ登録を行い、ビューに渡す
- ビューを表示する
##Artisan/アーティザン
プロジェクトを作成したり、
新規テーブルを追加したり、
バージョン確認をしたりとにかくお世話になる職人さん。
###よく使うコマンド
####コマンド一覧
php artisan list
####指定できるオプションの確認
php artisan help migrate
####Laravelのバージョン確認
php artisan --version
Laravel Framework version 5.2.10
####全ルートの確認
App/Http/routes.php
の内容を
リスト形式で出力します
php artisan route:list
####新規テーブルの作成
php artisan make:migration create_<<新規テーブル名>>_table --create=<<新規テーブル名>>
database/migrations/
にファイルが作成される
作成されたファイルにカラムの定義を行い、
下記を実行するとdatabase/migrations/
のファイル内のテーブルがデータベースに作成される
php artisan migrate
テーブル作成後にカラムの増減を行って実行すると
既にテーブルが存在するため、sqlエラーが発生する
その場合はオプションを指定すると削除後に作成される
全テーブルの再作成を行うため、データが全て消えることに注意
オプションを指定すれば対象のテーブルのみできるはず・・・
php artisan migrate:refresh
###実行例:認証関連のビューを一括作成
php artisan make:auth --views
ユーザー認証の基本的な機能を一括で作成できる
- ログイン/login.php
- ログアウト/logout.php
- ユーザー登録/register.php
- ...
Created View: <<プロジェクトパス>>/resources/views/auth/login.blade.php
Created View: <<プロジェクトパス>>/resources/views/auth/register.blade.php
Created View: <<プロジェクトパス>>/resources/views/auth/passwords/email.blade.php
Created View: <<プロジェクトパス>>/resources/views/auth/passwords/reset.blade.php
Created View: <<プロジェクトパス>>/resources/views/auth/emails/password.blade.php
Created View: <<プロジェクトパス>>/resources/views/layouts/app.blade.php
Created View: <<プロジェクトパス>>/resources/views/home.blade.php
Created View: <<プロジェクトパス>>/resources/views/welcome.blade.php
画面で確認するにはルーティングの追加が必要
今回は一括で登録するが確認が容易ではないため、
個別に登録するほうがよい
Route::auth();
##Eloquent/エロクアント
データベースの操作をするのは
Eloquentモデルを通して行う
###新規モデル作成
artizan
を使って新規モデルの作成を行う
php artisan make:model <<新規モデル名>>
###リレーション
・モデルで定義する
・親、子ともに定義を行う
例:「親:User」「子:Task」
・親:子にアクセスできるように「1対1」や「1対多」をpublicメソッドで定義する
- 1対1/hasOne
hasOne(App\Task);
- 1対多/hasMany
hasMany(App\Task);
親と子で外部キーが異なる場合に
第2引数、第3引数で指定ができるが説明は省略
・子:自分の親にアクセスできるように設定する
belongsTo(App\User);
##routes.php
App/Http/routes.php
プログラム一覧のようなもの
どのURLが指定された、
どの画面でリクエストを送られたという
元情報と、処理を行う先が記載されている
##.env
データベースの接続情報などの
設定を行うファイル
#開発でハマったところ
##新規プロジェクト作成時
ストレージに権限付与しないとエラーが発生し
画面が表示されない
chmod 777 -R /<<プロジェクトパス>>/storage
##app.php
config/app.php
自動で読み込まれるクラスや
エイリアスでクラスを設定したりするファイル。
チュートリアルでは「Input」クラスを使えるように
なっていたが新規作成した「Ver5.2.10」のファイルには
存在しなかった。
ここの前提が異なっていると調べたとおりに
記述したのに動かない!って状況が起こる。
##routes.php
Route::group(['middleware' => ['web']], function () {
<<新規ルート>>
}}
ルートグループ内に新規ルートを追加しないと
$errors
の中身が見えなかったり、基本的なことができない
##HttpException
例外が発生した場合、通常の「403」エラーを表示したり、
付加情報をつけたりすることができる
カスタマイズした「404」エラー等も表示することができる。
はずなのだが、うまくいかない
Symfony\Component\HttpKernel\Exception\HttpException in /vendor/laravel/framework/src/Illuminate/Foundation/Exceptions/Handler.php line:104
This action is unauthorized.
エラー発生行
$e = new HttpException(403, $e->getMessage());
#Ver5.2の新機能
##暗黙のバインディング/Implicit Binding
https://laravel.com/docs/5.2/routing#route-model-binding
・ルートモデル結束の機能の一つ
・ver5.2から追加された機能
・ver5.1では明示的バインディングが必要だった
app/Providers/RouteServiceProvider.php
上記の「boot」メソッドに使用するEloquentモデルを
定義する必要があった(例:$router->model('task', 'App\Task');)
これが必要なくなったことでリクエストでは
user_id等を送っていたのが受け取るときには
USERモデルになっているという不思議な現象が起こる
##モデルの指定の仕方
Taskモデルを指定する場合はhasOne(Task::class)
だったのが
hasOne(App\Task)
のようにパスで指定することができるようになった
#エラー対処
<<プロジェクトパス>>/storage/framework/views
エラーが発生すると途中まで記述されたphpファイルが出力されている
タイプミスが多かったのでどこの記述がおかしいのか
わかるここは重宝した