Xzxzyzyz.com
[Laravel] ユーザーのアクセスログを保存する
#Laravel

[Laravel] ユーザーのアクセスログを保存する

アプリケーションへアクセスしたユーザーのアクセスログは何かと役に立つので取っておきたいと思う人が多いと思います。 Laravelには認証系のイベントが用意されており、ログインしているユーザーからのリクエストがあった場合にイベントが発火されます。このイベントを購読することで、アクセスログの取得が可能です。 保存先には色々考えられますが、オンラインのログサービスのへ保存する方法を紹介します。本来の利用方法とは異なるかもしれませんが、とても利便性の高いログ情報を取得することができます。 データベース等、保存先を変更する場合でもリスナーを変更すれば同じような動作が可能です。 パッケージの導入 Composerでをインストールします。 パッケージの詳細についてはGitHub - xzxzyzyz/laravel-logging-rollbar: Rollbar for Laravel Loggingを参照してください。 Rollbarの準備 のアカウントをお持ちでない場合は以下からサインアップしてください。無料プランも用意されており、5,000件/月まで利用できます。 Rollbar で任意のプロジェクトを作成しましょう。 laravel-access-log-to-rollbar01 作成が完了するとプロジェクトへのアクセストークンが発行されます。 laravel-access-log-to-rollbar02 Laravel側で利用するのはなので、この情報をファイルへ追記します。 へのchannelを追加することで、への 通知をLaravelのログとして利用できるようになります。 アクセスログを保存するリスナーの作成 以下の用なイベントのリスナーを作成しましょう。 今回はログのラベルとしてアクセスのあったURLを利用します。 作成したリスナーをへ登録します。 以上でアクセスログをへ保存する準備ができました。 次に実際にログを送信してみます。 アクセスログの確認 migrationを実行してユーザー情報の入れ物を用意しておきます。 認証周りを有効にしておきます。 へアクセスしてユーザー登録を行うのと同じですが、を利用してユーザーを作成します。 へアクセスして作成したユーザーでログインした後、へアクセスしてログを確認してみましょう。 laravel-access-log-to-rollbar03 でユーザー毎のログを確認できます。 laravel-access-log-to-rollbar04 ではユーザーのリクエスト値やサーバー情報、SESSION情報、利用ブラウザ等の様々なデータが格納でき、柔軟な検索が可能です。 とても便利なサービスですので、この機会に是非使ってみましょう。

続きを読む
[Laravel] ログの保存先にオンラインのRoolbarを使う
#Laravel

[Laravel] ログの保存先にオンラインのRoolbarを使う

Laravelのログは通常ローカルのディレクトリへ保存されますが、オンライン上のエラーモニタリングサービスのへ保存してみましょう。 Error Tracking & Crash Reporting for Software Developers - Rollbar <br> Laravelのバージョンで、Log周りに関する大きなアップデートがありました。 Loggingに形式が採用され、一つ、あるいは複数の場所へログを保存できるようになりました。 デフォルトで便利なドライバが複数用意されていますが、オリジナルのchannnelを作成してへログを送信します。 公式のパッケージ では公式に以下のLaravel用のパッケージが用意されています。 GitHub - rollbar/rollbar-php-laravel: Rollbar error monitoring integration for Laravel projects しかしこれはに対応したロギングドライバではなく、単に今までのログシステムの拡張として、全てのログをへ送信する実装です。 src/RollbarServiceProvider.php のbootメソッドを見てみましょう。 ログイベントのリスナーとして、へのログ送信を登録しています。 Auto-Discoveryに対応しているので、composerでパッケージの追加を行った時点でこのリスナーが追加されることになります。でも利用可能ですが、二重にログが保存されるでしょう。 カスタムドライバの実装 前述のサービスプロバイダを参考にして、Laravelのログchannelとして実装します。 channelの登録には、インスタンスを返すクラスを実装するだけです。 インスタンスの作成にはchannel名と、が必要ですが。 公式パッケージより、が利用できるので、これをとしてハンドラへ登録します。 あとはへchannelとして登録するだけでへのログが送信されます。 全ての実装はGitHubで公開していますので利用してみてください。

続きを読む
[Laravel] BladeのComponent Aliasesを便利に使う方法
#Laravel

[Laravel] BladeのComponent Aliasesを便利に使う方法

Laravel5.6がリリースされましたが、目玉の一つとしてコンポーネントが大きくアップデートされました。 をより便利に使うために、コンポーネントとしての利用方法を紹介します。 Component Aliases コンポーネント化されたviewファイルの呼び出しにエイリアスが利用できます。 以下のファイルを作成します。 @includeを利用した呼び出し 引数に以下のパス(ドット)と、内で利用する変数を配列で渡します。 @componentを利用した呼び出し 引数に以下のパス(ドット)を渡して、の間に記述した内容がとして展開されます。 また、を記述することにより、引数に渡した文字列の変数に展開されます。 の呼び出しに対して、より動的な値や、HTMLタグを用いることが用意になります。 Blade::component()を利用した呼び出し 作成したファイルにオリジナルの名前をつけて利用することができるようになります。 サービスプロバイダ等で登録することにより、より柔軟な利用が可能になりました。 上記によりエイリアスとして登録され、ディレクティブとしてが利用可能になります。 Blade::include()を利用した呼び出し と似ていますが、こちらもエイリアスを利用した呼び出しが可能になります。 ただしこちらはをより簡単にしたもので、を利用することは出来ません。 サービスプロバイダで登録します。 登録が終われば、ディレクティブとしてが利用可能になります。 番外編 特定の条件によって、表示の有無を切り替える必要があることもあります。 ディレクティブやを利用することでコントロール可能ですが、ディレクティブの利用でよりスマートに記述できます。 をより詳しく学ぶためにも、公式のドキュメントを確認して起きましょう。

続きを読む
[Laravel] 5.6.12がリリースされました
#Laravel

[Laravel] 5.6.12がリリースされました

Laravelのバージョンがリリースされました。 コマンドが追加されました。 事前にBladeテンプレートをプリコンパイルすることで表示速度が向上します。 詳細については追加されたを参照してください。

続きを読む
[Laravel] 5.6.10がリリースされました
#Laravel

[Laravel] 5.6.10がリリースされました

Laravelのバージョンがリリースされました。更新された機能について確認していきます。 Added 1. メソッドが追加されました Added Blueprint::dropMorphs() (#23431) <br> 2. メール送信時にStorageからファイルを添付できるようになりました FileSystemを利用しているS3等のストレージからファイルを添付できます。 の場合は、でdefaultに指定しているストレージが利用されます。 Added methods (@0fa361d) <br> 3. Query Builderに、、が追加されました Added builder methods for day, month and year (#23449 ) Changed 1. stub作成じのドロップダウンリンクに属性を含むように変更されました Added to dropdown link in (@98fdbb0) <br> 2. が発生した場合のエラーメッセージが変更されました Handle more JSON errors gracefully when is set (#23410, @972b82a) <br> 3. ログ設定に、、が指定できるように変更されました に、もしくはを指定する場合にこのオプションが使用できます。 へ以下のように追加しましょう。 <br> 4. の戻り値がに変更されました Use instead of s (@ae4cb28) Fixed 1. バリデーションでkeyが重複する場合に値が失われる問題を修正しました Fixed call in (#23432) 2. 利用時の処理が修正されました Fix for Carbon 1.24.0 (@67d8a4b) <br> --- Release v5.6.10 · laravel/framework · GitHub

続きを読む
[Laravel] 5.6.9がリリースされました
#Laravel

[Laravel] 5.6.9がリリースされました

Laravelのバージョン、がリリースされました。更新された機能について確認していきます。 Changed (5.6.9) セッションの再発行時 () にトークン情報も再設定されるようになりました。 また、潜在的なXSSに対する修正により、Bootstrapのscaffoldingが変更されました。 JS Frameworks, Server Side Rendering, and XSS – Taylor Otwell – Medium 属性を付与することにより既存のコードを修正できます。 Regenerate token when regenerating the session (@20e8419) Fixed (5.6.9) Fixed an issue with resources when loading a single merge value with an associative array (#23414) <br> Release v5.6.9 · laravel/framework · GitHub Added (5.6.8) MySQLのが利用可能になりました。 Added support for MySQL’s sounds-like operator (#23351) <br> リクエスト数超過時の例外にが投げられるようになりました。 Added ThrottleRequestsException exception (#23358) <br> エンジンにディレクティブが追加されました。 Added @dump Blade directive (#23364) <br> メソッドが追加されました。 メッソド名の通り、指定のクラスをコレクションからフィルタリングできます。 Added Collection::whereInstanceOfMethod() (@78b5b92) <br> メソッドが追加されました。 トレイトを利用する場合にも同期的にJOB実行が可能になりました。 Added Dispatchable::dispatchNow() (#23399) Changed (5.6.8) を使用する際に発行される通知データを変更可能になりました。 メソッドをOverwriteすることで、Model毎の通知データをカスタマイズできます。 Allow extension of DatabaseNotification model attributes (#23337) <br> 認証系のscaffoldingがに対応しました。 コマンドで生成されるBladeファイルの全てが修正されました。 下記はのstubファイルです。 Made auth scaffolding translatable (#23342) <br> Eloquent Modelの(リレーションを作成する際に外部キーを取得するメソッド)の処理が変更されました。 から変更されました。 これによってをOverwrite可能になり、継承先のモデルからでも外部キーの変更が可能になりました。 Use getKeyName() in getForeignKey() (#23362) <br> FileSystemにてファイルやディレクトリを複数取得する際のソート順が名前順に変更されました。 Sort FileSystem files and directories by name (#23387) <br> Validatorのメソッドが検証済みの値を返却するように変更されました。 Return validated data from Validator::validate() (#23397, @3657d66) Fixed コマンドが修正されました Fixed serve command escaping (#23348) <br> Query Builderのメソッドの実装が移動されました。 Fixed an issue with multiple select statements in combination with withCount() (#23357) <br> Conditional loadの方法を修正しました。 Fixed conditional loading issues (#23369) <br> Model Factoryで配列を指定した場合の挙動が修正されました。 Prevent considering arrays as callable while building model factories (#23372) <br> Composerでがコンフリクトしていた問題を修正しました。 Move tightenco/collect to Composer’s conflict (#23379) <br> View内でループの引数にオブジェクトを渡した際の挙動が修正されました。 Set up loop variable correctly on all Traversable objects (#23388, @49770ec) <br> Pivot Modelで値をフィルタリングする処理が修正されました。 Removed attribute filling from pivot model (#23401 <br> Release v5.6.8 · laravel/framework · GitHub

続きを読む
[Laravel] Pwnedを使って安全なパスワードを利用する
#Laravel

[Laravel] Pwnedを使って安全なパスワードを利用する

サービスを利用する際にアカウントに設定する「パスワード」はとても重要です。他のサービスと同じパスワードの使い回しや、簡単なパスワードを利用したことによるアカウントの乗っ取り(不正アクセス)の危険があります。 Pwned Passwordsは過去に漏洩した膨大なデータを収集して、利用するパスワードが過去に何らかの形で漏洩したパスワードかどうかを確認できます。 このサービスをLaravelのユーザー登録時のとして使ってみましょう。 パッケージのインストール valorin/pwned-validatorをインストールします。 Laravelの未満を利用している場合は下記をへ追記します。 バリデーションの設定 Laravelの認証システムを利用できるようにしておきましょう。  のメソッドのにルールを追加します。 のURLへアクセスして、パスワード情報にといった簡易なものを入力してみましょう。バリデーションに引っかかります。 ※ 作成時点ではのパスワードは過去に漏洩しています。 バリデーションの際のメッセージを変更する場合はに追加しましょう。 <br> また、のデフォルトの漏洩回数はです。 この値を変更する場合は下記のように記述します。 Laravelので追加されたクラスでの利用も可能です。

続きを読む
[Laravel] Macroableを使ってクラスを拡張する
#Laravel

[Laravel] Macroableを使ってクラスを拡張する

Laravelのトレイトを使ったクラスの拡張について。 をuseするととして既存のクラスにメソッドを拡張することができます。 公式では実装済みのクラスにでの使い方が記されており、独自のメソッドを追加できるようになっています。 Collections - Laravel - The PHP Framework For Web Artisans また、コントローラーでリクエストされた値に対しての評価をする方法として下記があります。 このメソッドは下記のようにトレイトを使って定義されています。 1. にをuseしてメソッドの拡張を可能に 2. でmacro で登録 <br> トレイトのデメリットとしては、等を使わずに拡張しすぎると見通しが悪くなってしまう点と、で補完されないようです。 Validate method not found in Illuminate\Http\Request · Issue #608 · barryvdh/laravel-ide-helper · GitHub

続きを読む
[Laravel] 5.6.7がリリースされました
#Laravel

[Laravel] 5.6.7がリリースされました

Laravelのバージョンがリリースされました(2018-02-28)。更新された機能について確認していきます。 Added SFTPのファイルシステムが追加されました #23308 パッケージが含まれるようになりました。 GitHub - thephpleague/flysystem-sftp: Flysystem Adapter for SFTP へは以下のように記述します。 Changed ModelのwithDefaultメソッッドのコールバックに関連Modelの値を渡せるようになりました #23334 <br> Parsedownパッケージが1.7にアップデートされました @816f893 Fixed PostgresGrammar::whereTime()のキャスティングの問題が修正されました #23323 <br > SQLiteGrammar::whereTime()のキャスティングの問題が修正されました #23321 <br > Release v5.6.7 · laravel/framework · GitHub

続きを読む
[Laravel] QRコードの画像を作成してダウンロードする方法
#Laravel

[Laravel] QRコードの画像を作成してダウンロードする方法

スマートフォンの普及により、イベントやキャンペーンなどのURLの共有にはQRコードがよく使われるようになりました。画面上に表示するのはもちろんですが、画像としてDownloadしたい場合もあると思います。 Laravelを使えば簡単です。 パッケージのダウンロード 今回はを利用します。 GitHub - werneckbh/laravel-qr-code: QR Code Generator for PHP wrapper for Laravel 以下の通りでインストールしてください。 Laravel以下の場合はへサービスプロバイダとエイリアスを登録します。 QRコードダウンロード用のルーティング へ下記の用に追加します。 については、を参照してください。 また、ではURL以外にも様々なQRコードが発行できます。 Calendar Event Email Message Phone SMS Text URL meCard vCard v3 Wi-fi Network Settings <br> へアクセスするとQRコードの画像がダウンロードされることを確認しましょう。

続きを読む