- 投稿日:2020-03-05T23:23:58+09:00
AWS EC2にlaravelをデプロイ(初心者目線)
composer installでつまりました。
$ composer install Loading composer repositories with package information Installing dependencies (including require-dev) from lock file Warning: The lock file is not up to date with the latest changes in composer.json. You may be getting outdated dependencies. It is recommended that you run `composer update` or `composer update <package name>`. Your requirements could not be resolved to an installable set of packages. Problem 1 - laravel/framework v5.8.35 requires ext-mbstring * -> the requested PHP extension mbstring is missing from your system. - laravel/framework v5.8.35 requires ext-mbstring * -> the requested PHP extension mbstring is missing from your system. - Installation request for laravel/framework v5.8.35 -> satisfiable by laravel/framework[v5.8.35].$yum install php72-php-mysqlnd php72-php-mbstring php72-php-gd
これで解決$ composer install Loading composer repositories with package information Installing dependencies (including require-dev) from lock file Warning: The lock file is not up to date with the latest changes in composer.json. You may be getting outdated dependencies. It is recommended that you run `composer update` or `composer update <package name>`. Your requirements could not be resolved to an installable set of packages. Problem 1 - tijsverkoyen/css-to-inline-styles 2.2.2 requires ext-dom * -> the requested PHP extension dom is missing from your system. - tijsverkoyen/css-to-inline-styles 2.2.2 requires ext-dom * -> the requested PHP extension dom is missing from your system. - Installation request for tijsverkoyen/css-to-inline-styles 2.2.2 -> satisfiable by tijsverkoyen/css-to-inline-styles[2.2.2].sudo yum install php72-php-dom
これで解決$ php --iniで確認してみるとたしかにdomが入っています。
$ php --ini Configuration File (php.ini) Path: /etc/opt/remi/php72 Loaded Configuration File: /etc/opt/remi/php72/php.ini Scan for additional .ini files in: /etc/opt/remi/php72/php.d Additional .ini files parsed: /etc/opt/remi/php72/php.d/20-bz2.ini, /etc/opt/remi/php72/php.d/20-calendar.ini, /etc/opt/remi/php72/php.d/20-ctype.ini, /etc/opt/remi/php72/php.d/20-curl.ini, /etc/opt/remi/php72/php.d/20-dom.ini, /etc/opt/remi/php72/php.d/20-exif.ini, /etc/opt/remi/php72/php.d/20-fileinfo.ini, /etc/opt/remi/php72/php.d/20-ftp.ini, /etc/opt/remi/php72/php.d/20-gd.ini, /etc/opt/remi/php72/php.d/20-gettext.ini, /etc/opt/remi/php72/php.d/20-iconv.ini, /etc/opt/remi/php72/php.d/20-json.ini, /etc/opt/remi/php72/php.d/20-mbstring.ini, /etc/opt/remi/php72/php.d/20-mysqlnd.ini, /etc/opt/remi/php72/php.d/20-pdo.ini, /etc/opt/remi/php72/php.d/20-phar.ini, /etc/opt/remi/php72/php.d/20-simplexml.ini, /etc/opt/remi/php72/php.d/20-sockets.ini, /etc/opt/remi/php72/php.d/20-sqlite3.ini, /etc/opt/remi/php72/php.d/20-tokenizer.ini, /etc/opt/remi/php72/php.d/20-xml.ini, /etc/opt/remi/php72/php.d/20-xmlwriter.ini, /etc/opt/remi/php72/php.d/20-xsl.ini, /etc/opt/remi/php72/php.d/30-mysqli.ini, /etc/opt/remi/php72/php.d/30-pdo_mysql.ini, /etc/opt/remi/php72/php.d/30-pdo_sqlite.ini, /etc/opt/remi/php72/php.d/30-wddx.ini, /etc/opt/remi/php72/php.d/30-xmlreader.ini$ composer install Loading composer repositories with package information Installing dependencies (including require-dev) from lock file Warning: The lock file is not up to date with the latest changes in composer.json. You may be getting outdated dependencies. It is recommended that you run `composer update` or `composer update <package name>`. Nothing to install or update Generating optimized autoload files Warning: Ambiguous class resolution, "App\Http\Requests\ProfileRequest" was found in both "/var/www/html/tree2/tree2/myblog/app/Http/Controllers/IdRequest.php" and "/var/www/html/tree2/tree2/myblog/app/Http/Requests/ProfileRequest.php", the first will be used. Warning: Ambiguous class resolution, "App\User" was found in both "/var/www/html/tree2/tree2/myblog/app/Http/Controllers/User.php" and "/var/www/html/tree2/tree2/myblog/app/User.php", the first will be ~(省略)~[ec2-user@ip-172-31-36-97 myblog]$ composer update Loading composer repositories with package information Updating dependencies (including require-dev) Package operations: 1 install, 39 updates, 0 removals - Updating symfony/polyfill-ctype (v1.13.1 => v1.14.0): The following exception is caused by a lack of memory or swap, or not having swap configured Check https://getcomposer.org/doc/articles/troubleshooting.md#proc-open-fork-failed-errors for details PHP Warning: proc_open(): fork failed - Cannot allocate memory in phar:///usr/local/bin/composer/vendor/symfony/console/Application.php on line 952 Warning: proc_open(): fork failed - Cannot allocate memory in phar:///usr/local/bin/composer/vendor/symfony/console/Application.php on line 952 [ErrorException] proc_open(): fork failed - Cannot allocate memory ~(省略)~composer update
メモリ不足
下記で解決$ sudo /bin/dd if=/dev/zero of=/var/swap.1 bs=1M count=1024 $ sudo /sbin/mkswap /var/swap.1 $ sudo /sbin/swapon /var/swap.1
- 投稿日:2020-03-05T22:17:50+09:00
【React Native】Macで構築したLaravel Homesteadのローカル環境にExpoで開発しているアプリからアクセスする方法
経緯
Laravel Homestead + Reactのローカル環境のWebアプリケーション開発を経てReact NativeとExpoを利用したアプリ開発をしてみようとした時に、Webで構築したAPIをアプリから使えるようにする方法をまとめておきます。
mDNSとは
multicast Domain Name Serverの略です。
通常の名前解決ではDNSサーバに問い合わせを行いますが、mDNSではマルチキャスト転送を利用して同一ネットワーク内のデバイスに問い合わせる事で名前解決を行います。
つまりMacとiPhoneで同一ネットワーク環境を利用していれば、Macで用意したLaravel Homesteadのローカル開発環境にiPhoneからアクセスできる、ということです。
設定方法
Laravel Homesteadの公式リファレンスにある【Homestead設定 > ホスト名の解決】の項を見ると、mDNSを利用してホスト名を公開できると記載されています。
実際に必要な設定を以下に記載していきます。
hostsの設定
hosts192.168.10.10 homesteadまずはMac側のhostsの設定です。
homesteadはデフォルトのhomestead.testのトップレベルドメインを抜いた部分に対応して、IPアドレスもLaravel Homestead環境のデフォルトのものです。
それぞれ変更している方は適宜自身の環境に合わせて設定してください。$ ping homestead PING homestead (192.168.10.10): 56 data bytes 64 bytes from 192.168.10.10: icmp_seq=0 ttl=64 time=0.527 ms 64 bytes from 192.168.10.10: icmp_seq=1 ttl=64 time=0.348 ms 64 bytes from 192.168.10.10: icmp_seq=2 ttl=64 time=0.328 msこれで
http://homestead
でアクセスできる様になりました。Homestead.yamlの設定
Homestead.yamlhostname: homestead次にHomesteadの設定です。
先ほど紹介した公式リファレンスにも記載されている上記の一文をHomestead.yamlの最下部にでも追記します。
これを記述することでiPhoneからhomestead.localにアクセスした時に、mDNSを利用してMacのhostsに記述したhomesteadと同じ名前解決が行われます。ping homestead.local PING homestead.local (192.168.3.14): 56 data bytes 64 bytes from 192.168.3.14: icmp_seq=0 ttl=64 time=0.683 ms 64 bytes from 192.168.3.14: icmp_seq=1 ttl=64 time=0.264 ms 64 bytes from 192.168.3.14: icmp_seq=2 ttl=64 time=0.377 msこれで
http://homestead.local
に同一ネットワークを利用しているiPhoneからアクセスできる様になりました。
設定としてはこれで終わりですが、アプリからAPIサーバとして利用する場合は、fetch('http://homestead.local/XXXXX')この様に記載してあげれば大丈夫なはずです。
Vagrantを利用していて名前解決できない場合
Vagrantを利用しているとhostsとHomestead.yamlの設定だけでは出来ないことがある様です。
そんな時はVagrantfileに以下を追記して、Vagrantのネットワークアダプターをbridgeに変更することで名前解決ができるようになると思います。
追記した後はvagrant reload --provision
をして再度試してみてください。Vagrantfileconfig.vm.network "public_network", bridge: 'en0: Wi-Fi (AirPort)'最後に
これでReact Native + Expo + Laravel Homesteadの環境だけでアプリ・API開発ができるようになりました!
- 投稿日:2020-03-05T22:17:50+09:00
【React Native】Macで構築したLaravel Homesteadのローカル開発環境にiPhoneからアクセスする方法
経緯
Laravel Homestead + Reactのローカル環境のWebアプリケーション開発を経てReact NativeとExpoを利用したアプリ開発をしてみようとした時に、Webで構築したAPIをアプリから使えるようにする方法をまとめておきます。
mDNSとは
multicast Domain Name Serverの略です。
通常の名前解決ではDNSサーバに問い合わせを行いますが、mDNSではマルチキャスト転送を利用して同一ネットワーク内のデバイスに問い合わせる事で名前解決を行います。
つまりMacとiPhoneで同一ネットワーク環境を利用していれば、Macで用意したLaravel Homesteadのローカル開発環境にiPhoneからアクセスできる、ということです。
設定方法
Laravel Homesteadの公式リファレンスにある【Homestead設定 > ホスト名の解決】の項を見ると、mDNSを利用してホスト名を公開できると記載されています。
実際に必要な設定を以下に記載していきます。
hostsの設定
hosts192.168.10.10 homesteadまずはMac側のhostsの設定です。
homesteadはデフォルトのhomestead.testのトップレベルドメインを抜いた部分に対応して、IPアドレスもLaravel Homestead環境のデフォルトのものです。
それぞれ変更している方は適宜自身の環境に合わせて設定してください。$ ping homestead PING homestead (192.168.10.10): 56 data bytes 64 bytes from 192.168.10.10: icmp_seq=0 ttl=64 time=0.527 ms 64 bytes from 192.168.10.10: icmp_seq=1 ttl=64 time=0.348 ms 64 bytes from 192.168.10.10: icmp_seq=2 ttl=64 time=0.328 msこれで
http://homestead
でアクセスできる様になりました。Homestead.yamlの設定
Homestead.yamlhostname: homestead次にHomesteadの設定です。
先ほど紹介した公式リファレンスにも記載されている上記の一文をHomestead.yamlの最下部にでも追記します。
これを記述することでiPhoneからhomestead.localにアクセスした時に、mDNSを利用してMacのhostsに記述したhomesteadと同じ名前解決が行われます。ping homestead.local PING homestead.local (192.168.3.14): 56 data bytes 64 bytes from 192.168.3.14: icmp_seq=0 ttl=64 time=0.683 ms 64 bytes from 192.168.3.14: icmp_seq=1 ttl=64 time=0.264 ms 64 bytes from 192.168.3.14: icmp_seq=2 ttl=64 time=0.377 msこれで
http://homestead.local
に同一ネットワークを利用しているiPhoneからアクセスできる様になりました。
設定としてはこれで終わりですが、アプリからAPIサーバとして利用する場合は、fetch('http://homestead.local/XXXXX')この様に記載してあげれば大丈夫なはずです。
Vagrantを利用していて名前解決できない場合
Vagrantを利用しているとhostsとHomestead.yamlの設定だけでは出来ないことがある様です。
そんな時はVagrantfileに以下を追記して、Vagrantのネットワークアダプターをbridgeに変更することで名前解決ができるようになると思います。
追記した後はvagrant reload --provision
をして再度試してみてください。Vagrantfileconfig.vm.network "public_network", bridge: 'en0: Wi-Fi (AirPort)'最後に
これでReact Native + Expo + Laravel Homesteadの環境だけでアプリ・API開発ができるようになりました!
- 投稿日:2020-03-05T20:25:02+09:00
Problem 1 - The requested PHP extension ext-intl * is missing from your system.のエラー
環境
Laravel5.8
MAMP環境
Mac
php7.3問題
プロジェクト下のターミナルで
composer installを行った際に
Your requirements could not be resolved to an installable set of packages. Problem 1 - The requested PHP extension ext-intl * is missing from your system. Install or enable PHP's intl extension.というエラーに遭遇した。
単純にPHP's intl extensionというのを使えるようにしてくださいというエラーだと思い、
installしようとしたが悉くエラーが出てしまった。解決法
phpのバージョンを7.3 → 7.4に引き上げたらcomposer installできるようになりました。
バージョンアップ↓↓
https://qiita.com/tana08/items/046cba8e23d32599ee4a他に良い方法があれば共有していただきたく存じます。
- 投稿日:2020-03-05T20:16:30+09:00
Laravel5.5から6.xへアップグレード
あえてLaravel5.5のまま残してたプロジェクトを6.xに上げる。
先に結論。
LTSからLTSなのでやる人多そうだけど単純なプロジェクト以外ではやめたほうがいい。
今回のも1画面しかない単機能だからできたけど修正箇所が多くなると辛い。
LTS使うなら先のバージョンの変更点も追いつつヘルパー削除みたいなやばい変更が入ったらLTS使ってる段階から準備しておく。
それやるなら結局最新バージョン使っても同じなので開発が続いてるなら常に最新バージョン使うのが良い。見る所
差分
https://github.com/laravel/laravel/compare/5.5...6.x6.xブランチからzipでダウンロード。
https://github.com/laravel/laravel/tree/6.x後は各バージョンのドキュメント。
5.6
,5.7
,5.8
,6.x
と4バージョンも飛ばしたら通常規模のプロジェクトならかなり大変。config
基本的には差分見ながら書き換えていくしかないけど5.5からあまり変更してないならダウンロードしておいた6.xのファイルでそのまま上書きしてもいい。
特にconfigは多すぎるので上書きして再設定したほうが簡単。フロント
5.5の頃はまだLaravel mix 1.0。5.5使いつつフロントだけ最新にすることはできたけどこっちも放置してた場合は上げる。
既存プロジェクトにはlaravel/ui
の分離は関係ないけどapp.jsなどの変更点を探すならこっちを見る。
https://github.com/laravel/ui
ui2.xはLaravel7用。6用は1.x
https://github.com/laravel/ui/tree/1.x初回デプロイ時のエラー
bootstrap/cache
以下のキャッシュが残っててエラーが出たら削除すれば直る。artisanコマンドで削除しようとしてもコマンド実行前にエラーになることもあるのでこれは手動で削除。viewのキャッシュに6.xで削除されたヘルパーが残ってるとエラーなので
view:clear
で削除。
これはコマンドで削除できる。
この辺りはデプロイの度に毎回自動で実行している。php artisan config:cache php artisan route:cache php artisan view:cacheあくまでも本番環境へのデプロイ時なので開発環境ではキャッシュコマンドは一切使わない。
誰が騙してるのか知らないけどなぜか開発環境でconfig:cache
してる人がいなくならない。
デプロイ時に自動で実行するので手動で実行することはない。終わり
このプロジェクトはまた6.xのまま運用。
LTSと言っても何もメンテナンスしなくていいわけではなく毎日自動composer updateは続ける。
運用が続いてたら、次のLTSの次のバージョンが出た頃にまたバージョンアップ作業。Laravel5.5のサポート終了は2020年8月30日。
- 投稿日:2020-03-05T18:17:36+09:00
[お試し] Laravel Airlockによる認証つきAPI
はじめに
先日Laravel 7が公開されたのでリリースノートを読んでいたら、新機能の一つにAirlockなるものが。Introductionによると…
Laravel Airlock provides a featherweight authentication system for SPAs (single page applications), mobile applications, and simple, token based APIs.
トークンを付与するだけで認証できちゃうお手軽APIが作れそう!ということで、概ねドキュメント通りにやったお試し記事です。チュートリアル的にお読みいただければ幸いです。各作業に参照したドキュメントへのリンクを貼ったので、詳細の確認や、うまく動かないときはそちらをご覧ください。
試したときのバージョンは以下です。
- Laravel 7.0.4
- Airlock 1.0.0
チュートリアル的に、ということでLaravelのインストールから始めます。なのでAirlockのインストールまでは、今まで通りのLaravelの構築作業です。
Laravelのインストール
お決まりのcomposer create-projectをターミナルで。 (ドキュメント)
$ composer create-project --prefer-dist プロジェクト名コマンドを実行したディレクトリにプロジェクト名のフォルダができます。以下、コマンドは全て、このプロジェクト名のディレクトリで実行してます。
データベースの設定
認証するからにはユーザ情報が必要なのでデータベースの設定をします。mysqlなりなんなりとお好きなものをいつも通りに。
一例としてsqliteでやってみます。 (ドキュメント)
.env
のDB_CONNECTION
で設定できます。# DB_CONNECTION=mysql <-デフォルトのmysqlから変更します DB_CONNECTION=sqlitesqliteのファイルは、デフォルトだと
database/database.sqlite
らしいのでそこに空ファイルを作ります。ドキュメント通りにtouchが楽ですね。$ touch database/database.sqliteサーバの起動
今回はお試しなので、付属の簡易サーバを使います。ドキュメントはインストールのものと同じ章の下の方です。 (ドキュメント)
$ php artisan serve
これで
http://localhost:8000/
でLaravelにアクセスできるようになりました。ポート番号は実行の環境によっては違うかもしれないので、コマンドの実行結果を確認してください。こんなページです。
ユーザ作成
認証するためのユーザを登録するための機能を作ります。今回はLaravelへおんぶにだっこでいきます。 (ドキュメント)
$ composer require laravel/ui $ php artisan ui vue --auth $ npm install # vueで画面を表示するのでinstallして、と↑のコマンド終わりに言われます $ npm run devあとは
http://localhost:8000/register
にアクセスすれば、お決まりのユーザ登録ページが表示されます。ユーザを作成して
http://localhost:8000/home
にアクセスできればOKです。右上に登録したユーザ名が表示されるはず(今回はadminで登録しました)。これで認証用のユーザを作成できました。
Airlockのインストール
ここからがいよいよ本題。Airlockのインストールを始めます。といってもドキュメント通りです。 (ドキュメント)
$ composer require laravel/airlock $ php artisan vendor:publish --provider="Laravel\Airlock\AirlockServiceProvider" $ php artisan migrateここでデータベースにトークン管理用のテーブルが作成されます。今回はsqliteを使ったのでDB Browser for SQLiteで閲覧した図です。
トークンとユーザの関連付け
トークンとユーザを関連付けるために
app/User.php
へ設定を追加します。ドキュメントではクラス外にuseしてますが、説明が楽なのでフルパスで書いちゃいます(さぼり) (ドキュメント)class User extends Authenticatable { // クラス先頭にあるuseの後ろに追加します。 use Notifiable, \Laravel\Airlock\HasApiTokens; ...トークン生成用のページ作成
公式ドキュメントによると
$user->createToken('トークンの名前'):
でトークンを発行できるのだそうです。 (ドキュメント)今回はユーザ作成をブラウザ上でやりましたので、同じくブラウザ上でトークンを生成する機能を作ります。お試しなのでなるべく簡単に、ということでルーティングの設定に直接書いてしまいます(さぼり その2)。
どこでもいいんですが、今回は
routes/web.php
の一番下に追加しました。アクセスするたびにトークンを生成するので、今回は/reset
という名前にしました。Route::get("/reset", function() { // 現在ログインしているユーザを取得 $user = \Auth::user(); // アクセスするたびにトークンが増え続けるので先に削除 $user->tokens()->delete(); // トークン生成。データベースに保存されます。 $token = $user->createToken("token-name"); // 生成したトークンを表示 return response($token->plainTextToken); });これで
http://localhost:8000/reset
とブラウザにアクセスすると、生成したトークンが表示されます。↑のコードの通り、味も素っ気もない、ただ1行でるだけです。このコードはAPI呼び出しに必要になるので大事に取っておいてください。データーベースにもトークンが保存されています。
認証つきAPIの作成
これでトークンを発行できるようになりました。では、トークンでアクセスするAPIを作成します。お試しなので!またもやルーティングに直接書いちゃいます!! (ドキュメント)
今回はapiなので
routes/api.php
に記述します。ミドルウェアにauth:airlock
を指定するのがミソ。Route::middleware("auth:airlock")->get("check", function () { return response("valid token"); });
http://localhost:8000/api/check
にアクセスして認証が通ればvalid token
と返ってくるはず。認証つきAPI呼び出し
これで準備が整いました。あとはアクセスするだけです。生成したトークンをヘッダの
Authentication
で指定して叩きます。大事に取っておいて、と言ったのでなくした人はいないと思いますが、もしトークンをなくしたらもう一度http://localhost:8000/reset
にアクセスして生成してください。今回はcurlで叩いてみます。無事
valid token
とかえってこれば成功です。$ curl -X GET http://localhost:8000/api/ -H "Authorization: Bearer 生成したトークントークン生成のドキュメントに書いてあるとおり、
Bearer
の指定を忘れずに。はい、もちろん、忘れてドハマリしましました。対応するトークンの
last_used_at
に実行した日時が保存されますので、それを確認するのも運用時に役立ちそうです。おわりに
思った以上に簡単に認証つきAPIが作れました。ほとんどコマンドを叩くだけ…
「誰でもアクセスできるようにはしたくない、とはいえ、ごつい認証が欲しいほどでも」というときに使えそうです。他にもSPA向きの構築や、認可の仕組み(Token Abilities)もあるそうなので、いろいろ便利そうな機能です。
追記
SPAについて投稿しました! こちら
- 投稿日:2020-03-05T17:33:29+09:00
laradockで作成したプロジェクトがgithubで開けない
こちらの記事を参考に環境構築
LaradockをWindows 10 Homeにインストールデイレクトリ構成はこんな感じ
laradockpjt/
├app(laravelのプロジェクト)
├laradockローカルでの環境構築を終えてgithubにpush
しかしlaradockpjt直下のappフォルダが開けない(非活性?になってる)
原因
最初にlaradockをsubmoduleとしてクローンしてない
(gitのサブモジュール機能に関して全くの無知だった…)git clone -b LaraDock-ToolBox https://github.com/LaraDock/laradock.git //こっちだと開けない git submodule add https://github.com/LaraDock/laradock.git //こっちのコマンドでlaradockをサブモジュール化後は手順通りに進めるとOK!
すでに環境構築済みだったので巻き戻しにかなり時間食ってしまった…
- 投稿日:2020-03-05T13:52:39+09:00
php artisan migrateで外部キー追加ができない
問題
- commentsテーブルとpostsテーブルの2つを作ろうとしたがうまく行かない。
php artisan migrate Migrating: 2020_03_05_085907_create_comments_table Illuminate\Database\QueryException SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint (SQL: alter table `comments` add constraint `comments_post_id_foreign` foreign key (`post_id`) references `posts` (`id`))原因
- migrationsテーブルの中にmigrate実行履歴が入っていた。
- php artisan migrateをすると、migrationsテーブルの中に実行履歴が残るようだ。
- 別の原因でphp artisan migrate:rollbackを使わずに、drop tableしたせい。
解決
- drop tableのときに、delete from migrationsで関連する履歴を消しておく。
- あるいはちゃんとphp artisan migrate:rollbackをつかいましょう。
- 投稿日:2020-03-05T01:08:32+09:00
Laravel 7 Release Memo
Laravel 7 Release
Laravel7 です。素数です。おめでとうございます。
前回の Laravel6 から半年ぶりのメジャーリリースです。semvar になったので、数字のステップは大きいですが、変更内容は意外と無い(と信じたいです)。
LTS Version ではないので、Bugfix は 2020/09/03、SecurityFix は 2021/03/03 までの予定だそうです。
Upgrade Guide には馴染みになった High Impact Changes, Medium Impact Changes があります。
新機能
Model Cast
Cast 機能の自由化:
CastsAttributes
を使ったクラスを使えば、Model の要素を任意の型にキャストすることができるようになります。MailDriver
何か
\Mail::mailer('hoge')->send()
みたいなのができるようになるそうです。 ~数年前にほしかったなぁ…自前実装したよ…~Mail::mailer('postmark') ->to($request->user()) ->send(new OrderShipped($order));HTTP Client
HTTP Client の Facade ができて、Guzzleの長いコードを書かずに、サクッとHTTP Client が使えるようになるっぽいです。 ~Requests やいかんのか~
Route Model Binding
id
指定だけだったのが、任意のフィールド指定ができるようになりました。Route::get('api/posts/{post:slug}', function (App\Post $post) { return $post; });Artisan Test
今まで
./vendor/bin/phpunit
とやっていたのがphp artisan test
でも動くようになりました。Queue
maxExceptions
Configurationじゃんじゃか例外を出している時の上限数を決めて、止めることができるようです? ~redis が死んだ時に出まくった事あるけど、アレも止まるんやろか~
大きな変更点
依存関係
Symfony5系を使うようになりました。
composer.json
を編集してcomposer up
をする必要があります。
'laravel/framework': '^7.0'
'nunomaduro/collision': '^4.1'
'phpunit/phpunit': '^8.5'
'facade/ignition': '^2.0'
[High] Symfony5
App\Exceptions\Handler
クラスのreport
,render
メソッドの引数が、Exception
からThrowable
に変わります。use Throwable; public function report(Throwable $exception); public function render($request, Throwable $exception);[High] session.php
session.php
設定ファイルに存在する要素secure
,same_site
の値が微妙に変更されました。
- 旧:
'secure' => env('SESSION_SECURE_COOKIE', false),
- 新:
'secure' => env('SESSION_SECURE_COOKIE', null),
- 旧:
'same_site' => null,
- 新:
'same_site' => 'lax',
[High] Scaffolding
認証周りの Scaffolding は
laravel/ui
へ移動しました。もし使っている場合は、composer require laravel/ui "^2.0"
でインストールをしてください。[Low] recentlyCreatedToken method add to
Illuminate\Auth\Passwords\TokenRepositoryInterface
Illuminate\Auth\Passwords\TokenRepositoryInterface
にrecentlyCreatedToken
メソッドが追加されました。カスタマイズして使っている時は注意してね。Blade
力尽きたンゴ
[Medium]
addHidden
,addVisible
ドキュメント化されていない
addHidden
,addVisible
メソッドは削除されました。代わりにmakeHidden
,makeVisible
を使ってください。[Low] The booting / booted Methods
わからん。なんだこれ。
[High] Date Serialization
Larvel 7 から
toArray
,toJson
を使ったときの、日付のシリアライズが変わります。今まではCarbon
のtoJson
の結果を書き出していましたが、ISO-8601 にタイムゾーンと、fractional seconds(秒の小数点以下)を含んだフォーマットで書き出すようになります。この影響により、クライアントサイド側のパーサー周りを修正する必要があります。
具体的には2019-12-02 20:01:00
と表記されていた日付は2019-12-02T20:01:00.283041Z
になります。もしこの変更に不都合がある場合は
serializeDate
メソッドをオーバーライドで実装して任意のフォーマットで書き出すようにしてください。/** * Prepare a date for array / JSON serialization. * * @param \DateTimeInterface $date * @return string */ protected function serializeDate(DateTimeInterface $date) { return $date->format('Y-m-d H:i:s'); }[Medium] Factory Types
非ドキュメントの部分の factory types が消える予定?
[Low] The getOriginal Method
cast 機能が入ったので
$model->getOriginal()
が変更されます。使う場合はgetRawOriginal
を使ったら良いみたい。[Low] Route Binding
力尽きたンゴ
[Low] PSR-7 Compatibility
力尽きたンゴ
[未知数] Mail :: Configuration File Changes
Multiple Mail 対応に伴い、
mail.php
の設定ファイルが変更されました。人によってはごっそり変わるかもしれませんので、元ファイル を参考に手動migrateをしたほうが良いです。[Low] Markdown Mail Template Updates
デザイン変わったやで
[Low] Queue Deprecated --daemon Flag Removed
queue:work
コマンドにある--daemon
オプションは削除されます。そして daemon 起動が標準となります。[Low] Resources The
Illuminate\Http\Resources\Json\Resource
Class
Illuminate\Http\Resources\Json\Resource
クラスは廃止されました。代わりにIlluminate\Http\Resources\Json\JsonResource
を継承して使用してください。[Medium] Unique Route Names
Routing に付ける名前で重複した場合、以前までは重複チェックせずに起動していました。Laravel 7 からはユニークになるように設定してください。重複した場合、意図しない動きになるそうです。 ~開発中にぼへーっと重複させて動かしちゃうけど、後者優先で動いていたけど、その挙動がバラバラになるのかしら~
[Medium] Cors Support
Cross-Origin Resource Sharing 用の設定ファイルが、
config/cors.php
として増えました。元ファイルを参考に頑張ってください。[Medium] The assertSee Assertion
力尽きた
[Medium] The different Rule
different
Rule はリクエストに含まれる指定されたパラメータの一つが無い時は失敗するようになりました。