関連記事
laravel blade foreach loop変数とurlのプロパティ対照表...
Laravelのモデルサンプル、インサート アップデート 取得簡単に使えるMVC...
laravel sesssion 使い方を紹介、読込保存削除を使えるようになったらsession制覇...
PHPフレームワークlaravelにvuejs入れる時の初期設定まとめ、備忘録的...
laravelを使う時に出てくるエラー対応...
仕事の関係で laravel のアップグレード作業をしましたが、簡単にできると思ったけど意外とハマったことを記録します。
laravel5.7 か 8 から使い始めたので 5.1 ってそんなに変わらないだろうと単純に思ったことが一番のミス。特に認証周りですが、laravel のデフォルト auth 機能使っていたらそんなに問題ないかもしれませんが、カスタマイズドライバーの自己流認証に出会って、いろいろ大変でした。当たり前ですが、5.1 触ったことない人間はまず 5.1 と 5.2 のドキュメントを読んで変更該当箇所のロジックを理解して修正した方がスムーズに行くはずです。
5.1 から 5.2 へのアップグレード (opens new window)
<?php
return [
'defaults' => [
'guard' => 'web',
'passwords' => 'users',
],
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'token',
'provider' => 'users',
],
],
'providers' => [
'users' => [
'driver' => 'webEloquent',
'model' => App\Models\User::class,
],
],
];
ユーザを取得するカスタムメソッドを定義する Auth::extend メソッドを使っている場合、カスタムユーザプロバイダを定義するための Auth::provider を使ってください。カスタムプロバイダを定義したら、新しい auth.php 設定ファイルの providers 配列の中でそれを設定してください。
カスタム認証プロバイダについての詳細は、認証の完全なドキュメント (opens new window)で調べてください。
app/Providers/AuthServiceProvider.php
public function boot(GateContract $gate)
{
parent::registerPolicies($gate);
$this->app['request']->server->set('HTTPS', env('APP_ENV') == 'production');
$this->app['auth']->provider('webEloquent', function ($app) {
return
new webEloquentUserProvider(
new \Illuminate\Hashing\Hasher,
\Config::get('auth.providers.users.model')
);
});
}
app.php 設定ファイルのサービスプロバイダリストから
Illuminate\Foundation\Providers\ArtisanServiceProvider
Illuminate\Routing\ControllerServiceProvider
を削除
5.2 から 5.3.0 へのアップグレード (opens new window)
App\Providers\EventServiceProvider.php 修正
public function boot()
{
parent::boot();
}
In RouteServiceProvider.php line 25:
Declaration of App\Providers\RouteServiceProvider::boot(Illuminate\Routing\Router $router) should be compatible with Illuminate
\Foundation\Support\Providers\RouteServiceProvider::boot()
App\Providers\RouteServiceProvider.php 修正
public function boot()
{
parent::boot();
}
In ValidatorServiceProvider.php line 19:
Declaration of App\Providers\ValidatorServiceProvider::boot(Illuminate\Routing\Router $router) should be compatible with Illuminate\Foundation\Support\Providers\RouteServiceProvider::boot()
App\Providers\ValidatorServiceProvider.php 修正
public function boot()
{
// $attributes設定すると、各自のRequest Classのattributesの設定を、
// 設定しないと、resource/lang/ja(app.localeの設定)/validation.phpのattributesの設定を見に行く。
Validator::resolver(function($translator, $data, $rules, $messages, $attributes) {
return new CustomValidator($translator, $data, $rules, $messages, $attributes);
});
}
配列ヘルパーキーと値順序変更 💩
first
last
where
メソッドに渡すクロージャの、最初の引数として「値」が渡されます。
Arr::first($array, function ($value, $key) {
return ! is_null($value);
});
コレクションメソッドキーと値順序変更 :hankey
first
last
contains
コレクションメソッドでは、指定されたコールバッククロージャの 第1引数に「値」 が渡されます。
$collection->first(function ($value, $key) {
return ! is_null($value);
});
config/app.php
設定ファイルの中に、以下の設定オプションを追加してください。
'name' => 'アプリケーション名',
コンストラクターの中からセッションアクセス
Laravel5.3 では、セッションや認証済みユーザにコントローラのコンストラクタではアクセスできません。なぜなら、ミドルウェアがまだ実行されていないからです。
代わりに、クロージャベースのミドルウェアをコントローラのコンストラクタで直接で意義できます。この機能を使用する前に、アプリケーションが Laravel5.3.4 以上で実行されていることを確認してください。
代わりに、クロージャベースのミドルウェアをコントローラのコンストラクタで直接で意義できます。
public function __construct()
{
$this->middleware(function ($request, $next) {
$this->projects = Auth::user()->projects;
return $next($request);
});
}
$value = $request->session()->get('key');
は OK
Fluent なクエリビルダ (opens new window)が普通の配列の代わりに、Illuminate\Support\Collection インスタンスを返すようになりました。
use Illuminate\Database\Eloquent\Relations\Relation;
Relation::morphMap([
'user' => User::class,
]);
php や laravel だけのアップグレードは難しいものではないが、5.1 から 5.2 へアップグレードする時のカスタマイズ認証のところが一番大変でした。グーグル先生に聞いても答えがなく、5.1 のドキュメントを繰り返して読んで、カスタマイズ認証のやり方を先ず学習してからなんとか 5.2 にアップグレードできました。そもそもこれってメジャーの変更ではないか?でも思いました。それ以降のアップグレードは sessionn あたりや array 配列ヘルパーなどの変更がありました。あと、注意点としてphp artian cache:clear
php artisan config:clear
php aritsan view:clear
系のキャッシュをクリアはまめにした方が無難ですね。
複数 git ブランチ切り替えて作業する場合はcomposer update
する前に vendor ディレクトリ削除と composer.lock 削除した作業効率的になります。
session が見つからないエラーは何回か出ましたが、結局php artisan key:generate
で解消できました。
laravel blade foreach loop変数とurlのプロパティ対照表...
Laravelのモデルサンプル、インサート アップデート 取得簡単に使えるMVC...
laravel sesssion 使い方を紹介、読込保存削除を使えるようになったらsession制覇...
PHPフレームワークlaravelにvuejs入れる時の初期設定まとめ、備忘録的...
laravelを使う時に出てくるエラー対応...