2017年1月7日土曜日

Schoo / PHPフレームワーク(Laravel)

SchooでLaravel講座をやっていたので、のぞいて見ました。 下記はメモです。


メモ

Laravel homestead
Laravel公式で配布しているサンプルvagrantボックス

ssh鍵ファイル(id_rsa, id_rasa.pub)がない場合
$ ls -la ~/.ssh # で ssh鍵ファイル(id_rsa, id_rasa.pub)の有無を確認
$ ssh-keygen -t rsa # 実行場所はどこでもいい
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/hoge/.ssh/id_rsa): 
# 保存ファイル名。デフォルトで問題ないのでエンター

Enter passphrase (empty for no passphrase):             
# パスフレーズの入力

Enter same passphrase again:                                   
# パスフレーズの再入力

Your identification has been saved in /Users/hoge/.ssh/id_rsa.
Your public key has been saved in /Users/hoge/.ssh/id_rsa.pub.

$ composer create-project "laravel/laravel=5.1.*" --prefer-dist Laravel
まず、composerを使ってプロジェクトを作る。
出力見ていると、Laravelを勝手にインストールしてくれているようでした。
Installing laravel/laravel (v5.1.33)
  - Installing laravel/laravel (v5.1.33)
    Downloading: 100%    

Composerのミラーサイト
http://qiita.com/100/items/a1d73544c70fbfa7a643 参考 

リクエストクラス
$request-input(フォーム名)
でフォールの値を取得できる。
$request-all()
連想配列でHTTPリクエストに含まれるフォームの値を取得する

Eloquent
ORマッパー
クエリを書かなくてもDBにアクセスできる
マップさせているモデルクラスを使い、
$tweet = Tweet::find(id)
でidが一致するレコードを取得する
Tweet{
  id: 2,
  boyd: "hello",
  created_ad: "2017-01-01 00:00:00"
}

レコードの更新
取得したレコードのモデルオブジェクトを更新した後に、
$tweet->save();

XAMP for linux
vagrantのGUEST OS上で、wgetでinstallerの取得
chmod +xで実行権限をつける
sudo installer で実行
sudo /opt/lampp/lampp start でサービスの起動
(httpd, mysql, ftpdの起動)

bladeの分岐構文
@if()
@endif

bladeの変数の埋め込み
{{ $hoge }}

HTMLのform要素はGET/POST以外のHTTPメソッドをサポートしていない
_methodというパラメータを使うことで、独自にHTTPメソッドの解釈を実装する
<input name="_method" type="hidden" value="PUT">

Route:resource('/tweets','TweetController');
CRUDのデフォルトのルーティングを定めたルーティング定義

layout.bladeの差し替え(テンプレートの継承)
@section('page-title')
@endsection
layout.blade内のpage-titleセクションを置き換える

Laravel フラッシュデータ
1回きりセッション変数を使う場合は、PHPのセッションを使わなくてもいい。
永続化する必要性が「ない」データを扱う。
$request->session()->flash('key', 'value');

controllerのvalidateメソッド
第1引数=リクエスト変数
第2引数=リクエスト変数がもつパラメータをkey、バリデートルール文字列の配列をvalueとした連想配列
バリデーションがNGな場合は、直前のURLにリダイレクトされる

特別なフラッシュデータ
erros=エラーメッセージを格納
_old_input=入力されたパラメータ

代表的なバリデーションルール
required = 必須
string =   文字列
max:n = n文字まで

エラーメッセージの日本語化
HiroKwsさんが作ってくださったパッケージが便利
$ composer require laravel-ja/comja5
resources/langディレクトリに言語設定がある
resources/lang/ja/validation.phpにエラーメッセージ定義がある。
ただattribute変数を、プロジェクトに沿った設定にする。
    'attributes' => [
        'body' => 'ツイート本文',
        'name' => '名前',
        'email' => 'メールアドレス',
        'password' => 'パスワード',
    ],
config/app.php の
'lacele' => 'ja'にする

名前付きルートの定義
{{ route('xxx.index'} }}でaタグのリンクを埋め込む

bladeの変数埋め込み
{{ }}HTMLスケープする {!! !!}HTMLスケープしない

認証と認可は別
認証 = ユーザの特定
認可 = 権限の付与
どっちも必要なケースが多いので、混同されがち

DBマイグレーション
DBスキーマの修正を管理する
php artisan make:migration file_name で、マイグレーションの作成
php artisan migrate で、未適用のマイグレーションファイルのみを実行

Eloquentモデルの名前付のルール
モデルクラスの名前の末尾にsをつけたテーブルができる
アッパーキャメルケースのモデルクラス名は、スネークケースでsが末尾に着く。
英語のルールにsをつけてくれる。(fox → foxiesなど)

クエリビルダ
メソッドチェーンでクエリを構築する
Model::where('columun_name', 'operand', 'value')
->orderBy('column_name', 'desc')
->get(); # or ->first();

1 : nリレーション(has - n)
1側:
public function n-models(){ # 複数形
  return $this->hasMany('n-model_location');
}


n側:
public function 1-model(){ # 単数系
  return $this->belongsTo('1-model_location');
}

php artisan migrate:reset
migrationの巻き戻し

1 : 1リレーション(has - a)
A:
public function B-model(){ # 単数形
  return $this->hasOne('n-model_location');
}


B:
public function A-model(){ # 単数系
  return $this->belongsTo('1-model_location');
}

DB設定
プロジェクトルートの .envに設定する
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_DATABASE=hoge
DB_USERNAME=hoge
DB_PASSWORD=hoge

n : nリレーション(have - n)
A:
public function A-model(){ # 単数形
  return $this->belongsTo('n-model_location');
}


B:
public function B-model(){ # 単数系
  return $this->belongsTo('1-model_location');
}

attach(id);
n:nの関係において、相手先テーブルのidにひもづくレコードを中間テーブルに追加する

detach(id);
n:nの関係において、相手先テーブルのidにひもづくレコードを中間テーブルに削除

sync([id_1, id_2,.. id_n]);
n:nの関係において、相手先テーブルのidにひもづくレコードのみ残るように更新する。
指定したidに紐づかないレコードは削除する

shift + cmd + o
PhpStormの「ファイル名を指定して開く」のショートカット

PHP preg_split関数
正規表現で文字列を分割し、配列を返す

環境設定
.envファイルで設定する
環境に合わせた.envファイル(.env.local, .env.state, .env.productなど)を用意し、
適切なものを.envにリネームする。
env('DB_HOST', 'localhost')のようにDB_HOST変数が設定されていれば、その値、
DB_HOST変数が設定されていなければlocalhostが設定される

LaravelはMVCフレームワークではない
MVCも実現できるフレームワーク

Eloquentモデルの置き場所は使い手が責任を持って決める
Eloquentモデルの置き場所はユーザが自由に選べる。

migrationメソッド
increments(column_name) = 主キーの作成
timestamp() = created_at, updated_at

0 件のコメント:

コメントを投稿