- 投稿日:2019-08-20T18:35:01+09:00
LaravelのEloquentで最初のn件とn件目以降のデータを取得する
- 投稿日:2019-08-20T17:31:08+09:00
Laravelで.vimrc.localのnoexpandtabが効かなかった
先に結論
Laravelインストール時に設置されていた
editorconfig
が効いているだけでした。経緯
Laravelでbladeファイルをタブインデントにしたかったので、以下の
.vimrc.local
を設置したが効かなかった。.vimrc.localif &filetype == "blade" set noexpandtab endif原因の確認
vim上で以下のコマンドを叩いて、インデントの設定で何が優先されているのかを確認。
:verbose set expandtab? noexpandtab 最後にセットしたスクリプト: ~/.vim/bundle/editorconfig-vim/plugin/editorconfig.vim 行 545Laravelのプロジェクトルートディレクトリにある
.editorconfig
が優先されていた。
.vimrc.local
をやめて.editorconfig
に以下を追記することで解決。.editorconfig[*.blade.php] indent_style = tab indent_size = 3
- 投稿日:2019-08-20T12:42:48+09:00
【Laravel】setVisibilityで権限はどう変わるのか
Laravelで保存したファイルに権限を設定することができる。
setVisibility
というメソッドを使うことで、ユーザから見れるようにするかどうかという設定を変えるものである。使い方は、
Storage::->setVisibility($file_path, 'private or public');
となる。
Storage
はローカル環境ならローカルに、本番環境ならs3にするなど、環境変数で振り分けたりする。provateとpublicの権限の違い
protected static $permissions = [ 'file' => [ 'public' => 0644, 'private' => 0600, ], 'dir' => [ 'public' => 0755, 'private' => 0700, ] ];上記のように設定されているので、
public
ならユーザからも見ることができるし、private
だとユーザからは見ることができない。画像の使い道は、アイコンとか、商品画像が多いような気がするので
public
でいいんじゃないかなと思うが、管理画面でしか使わない画像など、見せたくない画像があった時は、private
にしておく方が良いと思う。
- 投稿日:2019-08-20T08:40:59+09:00
Laravel 5.8 -> 6.0 LTS Upgrade Guide が更新されました!
For those that aren't aware: Laravel 6.0 will be an LTS release. ? #DatEnterprise
— Taylor Otwell ? (@taylorotwell) August 19, 2019こちらのツイートの通り、 Laravel 6.0 は LTS サポートになる予定とのことです。
そして、 Laravel 5.8 から 6.0 へのアップグレードガイドも更新されました(リリースまでもう少し更新が入るかもしれません)。
I've finished my first pass at the Laravel 5.8 -> 6.0 upgrade guide. Pegging upgrade time estimate at about 1 hour. Probably faster for majority of applications. https://t.co/ZqYGWEXp5S ?
— Taylor Otwell ? (@taylorotwell) August 19, 2019以下、要約。
Upgrade dependencies
composer.json の
laravel/framework
の依存を^6.0
にしてcomposer update
をかけます。6.0 から SemVer を採用するので、 7.0 になるまで破壊的変更は含まれない予定となっています。そのため、バージョン指定は
6.0.0~6.x.x
となる^6.0
を指定する形になります。もちろん、このアップグレードがほかの dependencies で対応しているかしっかりと確認する必要があります。これは以前からのアップグレードと同様です。
特に今回は 5.8 から 6.0 へのアップグレードのため、多くのライブラリは
laravel/framework: ^5.6
といった形で依存していて、しっかりとした更新対応が入るまでアップグレード出来ないのではないでしょうか。認可処理
Authorized Resources
$this->authorizeResource(Post::class, 'post');
のような形でリソースコントローラに対してコンストラクタでポリシーを設定している場合、index
メソッドは元々認可をスルーしていましたが、viewAny
メソッドをポリシークラス側に定義しない限り認可で拒否されるように変更になりました。RegisterController
RegisterController の
register
registered
メソッドを上書きしている場合は、親メソッドを呼ぶ必要が出てきました。イベントの発行場所なども変わっているので注意が必要です。Authorization Responses
Illuminate\Auth\Access\Response
クラスが変更になりました。Database
プライマリキー型定義
パフォーマンス最適化のため、
protected $keyType = 'string';
のように、string
系の型をプライマリキーとして保持している場合は、このプロパティを指定する必要が出ました。Email 確認
email/resend
ルーティングがGET
からPOST
に変わりました。そのため、 view 側で CSRF を追加するなどの修正が必要です。ヘルパー
str_plug
やarray_get
などのヘルパー関数が今までsrc/Illuminate/Support/helpers.php
に実装されていましたが、Illuminate\Support\Str
またはIlluminate\Support\Arr
の静的メソッドを使うことが推奨されるようになりました。また、
composer require laravel/helpers
として別パッケージ化されたそれらのメソッドを要求することも可能です。Localization
Lang::trans
はLang::get
に、Lang::transChoice
はLang::choice
にメソッド名が変更になりました。
Lang::get
とLang::getFromJson
は同じ扱いになったので、Lang::getFromJson
ではなくLang::get
を呼ぶことが推奨されるようになりました。
__('foo')
や@lang('foo')
を使っている場合は特に変更は不要ですね。キュー
php artisan queue:work
を今まで呼んだ場合、失敗したジョブを無限に繰り返すようになっていました。今後は 1 度のみ再実行されます。無限に再実行したい場合は--tries=0
を指定します。Input Facade
Input
Facade は削除されました。Input::get
を使っていた場合はRequest::input
を使ってください。Input
はそのままRequest
Facade に置き換え可能です。
他にも規模の小さい破壊的変更がありますが、ごらんのとおり今までと同じレベルの変更度合いですね。安心しました。
今後は 6.0.0 も 6.9.10 も同じコードで利用出来るようになるはずです(セキュリティリリースなど致命的なものは除く)。
また、大体半年置きにメジャーアップデートが行われていましたが、それは継続するようなので、恐らく来年の2月くらいに Laravel 7.0 が出るのではないかと思います。
※上記のリリースノートはまだ途中のものなので、今後他にも破壊的変更が含まれる可能性があることに注意してください。
※上記は要約で省略している部分もあります。