20200305のlaravelに関する記事は9件です。

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
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【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の設定

hosts
192.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.yaml
hostname: 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をして再度試してみてください。

Vagrantfile
config.vm.network "public_network", bridge: 'en0: Wi-Fi (AirPort)'

最後に

これでReact Native + Expo + Laravel Homesteadの環境だけでアプリ・API開発ができるようになりました!

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【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の設定

hosts
192.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.yaml
hostname: 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をして再度試してみてください。

Vagrantfile
config.vm.network "public_network", bridge: 'en0: Wi-Fi (AirPort)'

最後に

これでReact Native + Expo + Laravel Homesteadの環境だけでアプリ・API開発ができるようになりました!

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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

他に良い方法があれば共有していただきたく存じます。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Laravel5.5から6.xへアップグレード

あえてLaravel5.5のまま残してたプロジェクトを6.xに上げる。

先に結論。
LTSからLTSなのでやる人多そうだけど単純なプロジェクト以外ではやめたほうがいい。
今回のも1画面しかない単機能だからできたけど修正箇所が多くなると辛い。
LTS使うなら先のバージョンの変更点も追いつつヘルパー削除みたいなやばい変更が入ったらLTS使ってる段階から準備しておく。
それやるなら結局最新バージョン使っても同じなので開発が続いてるなら常に最新バージョン使うのが良い。

見る所

差分
https://github.com/laravel/laravel/compare/5.5...6.x

6.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日。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

[お試し] 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でやってみます。 (ドキュメント)

.envDB_CONNECTIONで設定できます。

# DB_CONNECTION=mysql <-デフォルトのmysqlから変更します
DB_CONNECTION=sqlite

sqliteのファイルは、デフォルトだとdatabase/database.sqliteらしいのでそこに空ファイルを作ります。ドキュメント通りにtouchが楽ですね。

$ touch database/database.sqlite

サーバの起動

今回はお試しなので、付属の簡易サーバを使います。ドキュメントはインストールのものと同じ章の下の方です。 (ドキュメント)

$ php artisan serve

これでhttp://localhost:8000/でLaravelにアクセスできるようになりました。ポート番号は実行の環境によっては違うかもしれないので、コマンドの実行結果を確認してください。

こんなページです。

image.png

ユーザ作成

認証するためのユーザを登録するための機能を作ります。今回はLaravelへおんぶにだっこでいきます。 (ドキュメント)

$ composer require laravel/ui
$ php artisan ui vue --auth
$ npm install # vueで画面を表示するのでinstallして、と↑のコマンド終わりに言われます
$ npm run dev

あとはhttp://localhost:8000/registerにアクセスすれば、お決まりのユーザ登録ページが表示されます。

image.png

ユーザを作成してhttp://localhost:8000/homeにアクセスできればOKです。右上に登録したユーザ名が表示されるはず(今回はadminで登録しました)。

image.png

これで認証用のユーザを作成できました。

Airlockのインストール

ここからがいよいよ本題。Airlockのインストールを始めます。といってもドキュメント通りです。 (ドキュメント)

$ composer require laravel/airlock
$ php artisan vendor:publish --provider="Laravel\Airlock\AirlockServiceProvider"
$ php artisan migrate

ここでデータベースにトークン管理用のテーブルが作成されます。今回はsqliteを使ったのでDB Browser for SQLiteで閲覧した図です。

image.png

トークンとユーザの関連付け

トークンとユーザを関連付けるために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呼び出しに必要になるので大事に取っておいてください。

image.png

データーベースにもトークンが保存されています。

image.png

認証つき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に実行した日時が保存されますので、それを確認するのも運用時に役立ちそうです。

image.png

おわりに

思った以上に簡単に認証つきAPIが作れました。ほとんどコマンドを叩くだけ…
「誰でもアクセスできるようにはしたくない、とはいえ、ごつい認証が欲しいほどでも」というときに使えそうです。

他にもSPA向きの構築や、認可の仕組み(Token Abilities)もあるそうなので、いろいろ便利そうな機能です。

追記

SPAについて投稿しました! こちら

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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!

すでに環境構築済みだったので巻き戻しにかなり時間食ってしまった…

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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したせい。

image.png

解決

  • drop tableのときに、delete from migrationsで関連する履歴を消しておく。
  • あるいはちゃんとphp artisan migrate:rollbackをつかいましょう。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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 の要素を任意の型にキャストすることができるようになります。

Custom Cast

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

  1. App\Exceptions\Handler クラスの report,render メソッドの引数が、Exception から Throwable に変わります。
use Throwable;

public function report(Throwable $exception);
public function render($request, Throwable $exception);

[High] session.php

  1. 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\TokenRepositoryInterfacerecentlyCreatedToken メソッドが追加されました。カスタマイズして使っている時は注意してね。

Blade

力尽きたンゴ

[Medium] addHidden,addVisible

ドキュメント化されていない addHidden,addVisible メソッドは削除されました。代わりに makeHidden,makeVisible を使ってください。

[Low] The booting / booted Methods

わからん。なんだこれ。

[High] Date Serialization

Larvel 7 からtoArray,toJson を使ったときの、日付のシリアライズが変わります。今までは CarbontoJson の結果を書き出していましたが、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 はリクエストに含まれる指定されたパラメータの一つが無い時は失敗するようになりました。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む