Nothing worth to see here
あくまでも自分用のメモ
引き続きドットインストールのお世話になります。
今回はlaravelフレームワークのメモを残していきます。
メモ
- Composer
-
laravelをインストールする上で、composerを使います。
依存性チェックツール。
JavaでいうMaven, Gradleにあたりますかね。
PHPはコンパイラ言語ではなくインタープリタ言語のため、build不要のはずです。
そのため、純粋に依存性のチェックと解決(必要なライブラリのインスト)だけだと思っています。
なぜ依存性チェックツールがlaravelのインストールの前に必要かというと、
laravelはフレームワークで多数のライブラリを必要とするため、
手動でライブラリの依存問題を解決するのは、やってられないからです。 - composerのインストール
-
ろくに英語を読まずにやっていましたが、公式ドキュメントを参考に、下記のコマンドを実施しました。
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" php -r "if (hash_file('SHA384', 'composer-setup.php') === \ '61069fe8c6436a4468d0371454cf38a812e451a14ab1691543f25a9627b97ff96d8753d92a00654c21e2212a5ae1ff36') \ { echo 'Installer verified'; } else { echo 'Installer corrupt'; \ unlink('composer-setup.php'); } echo PHP_EOL;" php composer-setup.php --install-dir=/usr/bin --filename=composer php -r "unlink('composer-setup.php');"
- php artisan --version
-
laravelのバージョン確認
結果Laravel Framework version 5.3.28
- laravelプロジェクトの作成
-
composer create-project --prefer-dist laravel/laravel
これでプロジェクトを作成できます。 - .env
-
設定ファイル
まずは、下記3つの項目を更新する。- DB
- USER NAME
- PW
- config/app.php
-
envヘルパー
'log' => env('APP_LOG', 'single')
と言うやつ。
env()で.envから'APP_LOG'keyがkeyとして設定されている値を返します。
設定されていない場合は、二つ目の引数('single')が設定されるそうです。 - config/app.php : 設定項目
-
'timezone' => 'Asia/Tokyo'
'locale' => 'ja' - yumコマンドのエラー
-
自分の自己解決能力のなさを呪いながらも、Qiitaの記事でFIXしました。[vagrant@localhost myblog]$ yum install tree Failed to set locale, defaulting to C ??????????:fastestmirror
localeがセットできないというエラー。
/etc/sysconfig/i18nにLC_CTYPE="ja_JP.UTF-8"を足す。 - Httpセッションの管理系ソースを置くフォルダ
-
</Project Base Dir>/app/Http/
[vagrant@localhost myblog]$ tree app/Http/ app/Http/ ├── Controllers │ ├── Auth │ │ ├── ForgotPasswordController.php │ │ ├── LoginController.php │ │ ├── RegisterController.php │ │ └── ResetPasswordController.php │ └── Controller.php ├── Kernel.php └── Middleware ├── EncryptCookies.php ├── RedirectIfAuthenticated.php └── VerifyCsrfToken.php
- routingを管理するファイル
-
laravel 5.3ではroute/web.phpでroutingを管理
[vagrant@localhost myblog]$ tree routes/ routes/ ├── api.php ├── console.php └── web.php
- View関連を格納するディレクトリ
-
</Project Base Dir>/resources/Views
[vagrant@localhost myblog]$ tree resources/ resources/ ├── assets ├── lang └── views ├── errors │ └── 503.blade.php ├── vendor └── welcome.blade.php
- php artisan make:migration <Migration Name>
-
まだ理解できていないのですが、マイグレーションファイルがこれでできる。
artisanファイルは、laravelのBase Dir直下にありますので、
Base Dirで上記のコマンドを実行しましょう。
php artisan make:migration create_posts_table --create=posts Created Migration: 2016_12_28_145157_create_posts_table
</Project Base Dir>/database/migrationsディレクトリ配下にできます。 - マイグレーションファイル
- 作成直後のファイルのベタ貼り
increments('id'); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('posts'); } }
テーブル削除も外部キーあると面倒くさかったりしますもんね。 - Blueprintクラスのメソッド
-
- increments : int unsigned not null auto_increment primary key
- string : varchar(255) not null
- text : text not null
- マイグレーションファイルの実行
-
php artisan migrate Migrated: 2016_12_28_145157_create_posts_table
- 既存テーブルに変更を加えるマイグレーションファイルの作成
-
php artisan make:migration modification --table=posts
新規作成ではなく、既存テーブルの変更の場合は--tableオプションを使用します。
基本的に--createで作ったファイルと同じですが、
up()/down()それぞれにある、Schema::tableメソッドは未実装です。 - php artisan make:status
- どのマイグレーションファイルが適用されているかを出力する
- マイグレーションファイル実行のロールバック
php artisan migrate:rollback
最後に実行したマイグレーションファイルのdown()が実行される模様。便利!
Rolled back: 2016_12_28_153233_add_summary2- マイグレーションファイル実行のロールバック
php artisan migrate:rollback
最後に実行したマイグレーションファイルのdown()が実行される模様。便利!
Rolled back: 2016_12_28_153233_add_summary2- マイグレーションファイル実行のロールバックで「Class xxx not found」が出た時
composer dump-autoload
composerにパスが通っている前提です。
Generating autoload files- モデル作成用マイグレーションファイルの作成
php artisan make:model Comment
appディレクトリ配下にComment.phpができます。
Model created successfully.- 対話的にモデルを通してDBにモデルの構造のレコードを挿入する
-
tinkerというプログラムを呼ぶ
php artisan tinker Psy Shell v0.8.0 (PHP 5.6.29 — cli) by Justin Hileman >>> $comment = new App\Comment(); => App\Post {#674} >>> $comment->title = 'title 1'; => "title 1" >>> $comment->body = 'body 1'; => "body 1" >>> $comment->save(); => true >>>
- tinkerの終了
- exit
- Mass Assignmentってなんやねん。
-
答えはスタックオーバーフローにある
冒頭の数行しか読んでないですが、、、、
配列を使った、複数プロパティ(ORMしているからレコードのフィールドと同義)への代入のことですね。
Mass = 大量の, Assignment = 割り当て
ですもんね。
便利ではあるけど、セキュリティホールになるので、laravelはデフォがオフです。
個別に許可を設定する必要があります。 - tinkerでstaticメソッドのcreate()を使いDBにモデルの構造のレコードを挿入する
-
create()メソッドを使って、連想配列を使ってレコードを挿入する。
しかし、前項目で書いた通り、先にMass Assignmentの設定をモデルクラスでする必要があります。
設定しないと下記のエラーが出ます。>>> App\Comment::create(['title'=>'title 2', 'body'=>'body 2']); Illuminate\Database\Eloquent\MassAssignmentException with message 'title'
モデルクラスでプロパティにfillableを設定します。
Mass Assignmentを許可するカラム名を配列で設定します。protected $fillable = [ 'title', 'body'];
Mass Assignmentの設定をしたら、tinkerを再度立ち上げて、createメソッドを実行します。
連想配列の形で、複数カラムに値を設定できます。便利。>>> App\Comment::create(['title'=>'title 3', 'body'=>'body 3']);
0 件のコメント:
コメントを投稿