20201021のlaravelに関する記事は6件です。

heroku + laravel queue

TL;DR

heroku ps:scale worker=1
Procfile
web: vendor/bin/heroku-php-nginx -C nginx_app.conf public/
worker: php artisan queue:restart && php artisan queue:work database --tries=3

最強な良記事

実装

laravel側

routes/api.php
Route::post('queue-data',function(){
    $accessAt=now();
    $data=Str::random(10);
    \App\Jobs\StoreQueueData::dispatch($accessAt,$data)->delay(now()->addSeconds(3));
    return response()->json(['data' => $data,'access_at'=>$accessAt]);
});
app/Jobs/StoreQueueData.php
    public function handle()
    {
        $queue=QueueData::create([
            'data'=>$this->data,
            'access_at'=>$this->accessAt,
            'handle_at'=>now(),
        ]);
        Log::info('handle',['queue'=>$queue]);
    }

heroku設定

heroku ps:scale worker=1
Procfile
web: vendor/bin/heroku-php-nginx -C nginx_app.conf public/
worker: php artisan queue:restart && php artisan queue:work database --tries=3

動作確認

heroku-queue.png

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

heroku + laravel queue -- laravelキューをherokuで動かす

TL;DR

heroku ps:scale worker=1
Procfile
web: vendor/bin/heroku-php-nginx -C nginx_app.conf public/
worker: php artisan queue:restart && php artisan queue:work database --tries=3

最強な良記事

実装

laravel側

routes/api.php
Route::post('queue-data',function(){
    $accessAt=now();
    $data=Str::random(10);
    \App\Jobs\StoreQueueData::dispatch($accessAt,$data)->delay(now()->addSeconds(3));
    return response()->json(['data' => $data,'access_at'=>$accessAt]);
});
app/Jobs/StoreQueueData.php
    public function handle()
    {
        $queue=QueueData::create([
            'data'=>$this->data,
            'access_at'=>$this->accessAt,
            'handle_at'=>now(),
        ]);
        Log::info('handle',['queue'=>$queue]);
    }

heroku設定

heroku ps:scale worker=1
Procfile
web: vendor/bin/heroku-php-nginx -C nginx_app.conf public/
worker: php artisan queue:restart && php artisan queue:work database --tries=3

動作確認

heroku-queue.png

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

Laravel:バリデーションの検証ルール

【概要】

1.バリデーションの主な用意されている検証ルール

2.その他の用意されている検証ルール

3.開発環境

1.バリデーションの主な検証ルール

app/Http/Controllers/XXXXController.php
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class XXXXController extends Controller
{
  public function post(Request $request)
    {
      $validate_rule = [
        'name' => 'required' , #---❶
        'mail' => 'email' , #---❷
        'age' => 'numeric|between:0,150' , #---❸
        ];
    }
}

❶:"required"は、必須項目であることを示します。値がnull,空文字列(NULLとは違う)、
❷:"email"は、形式チェックのみで実際に使用できるかどうかはチェックしません。
❸:"numeric"は、値が数値であるかをチェックします。"integer"は整数であるかをチェックします。"between:最小値,最大値"は、最小値〜最大値の範囲内であるかをチェックします。"|"を使用することで複数検証ルールを実装することができます。

※今回はバリデーションの説明なので、 return view('XXXX.index' , ['XXX'=>'XXXX']);等々の記載は省いています。

2.その他の検証ルール

=> 'alpha' #入力したすべてがアルファベットがチェック
=> 'alpha-num' #入力したすべてがアルファベットと数字かチェック
=> 'boolean' #true,false,0,1といった真偽値可動かをチェック
=> 'filled' #空欄でないかをチェック
=> 'present' #値が存在しているかのチェック。値はnull存在していれば問題なし。
=> 'string' #文字列かチェック
=> 'unique:テーブル名, カラム名' #データーベースにあるテーブルの該当カラムと重複していないかのチェック。emailと併用して使うことが多いです。


3.開発環境

PHP 7.4.10
Laravel 8.9

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

Laravel 【初心者】 PHPフレームワーク Laravel入門 第2版 の内容を一部図式化してみた件 ⑭バリデータの利用(条件に応じてルールを追加)

はじめに

この記事はプログラミングをはじめたばかりの素人が、メモするのに利用しています。
内容には誤りがあるかもしれません。

PHPフレームワーク Laravel入門 第2版 について

Laravelを独学で学ぶにあたり、評判がよかったのでAmazon Kindleで購入しました。
内容も色々な方法が書いてあるので、Laravelをはじめて勉強される方にはおすすめの本です。

Amazon リンク
https://www.amazon.co.jp/gp/product/B08625YD7H/ref=ppx_yo_dt_b_d_asin_image_o09?ie=UTF8&psc=1

図式化について

学習中に、文字だけだとイメージが掴みづらかったので、自分の為に作成したものです。
また方法が色々あり過ぎて混乱したので、整理する意味もあります。
ディレクトリを覚えるのにも使いました。

コードは必要なものだけ抜粋しているので、全てではありません。
これだけ見ても勉強にはならないので、PHPフレームワーク Laravel入門 第2版を是非購入してみて下さい。

※ちなみに著者の方とは何の関係もありません。

素人が作成した物なので、参考程度に使ってください。

バリデータの利用(条件に応じてルールを追加)

valir.jpg

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

Laravel 【初心者】 PHPフレームワーク Laravel入門 第2版 の内容を一部図式化してみた件 ⑬バリデータの利用(クエリー文字列)

はじめに

この記事はプログラミングをはじめたばかりの素人が、メモするのに利用しています。
内容には誤りがあるかもしれません。

PHPフレームワーク Laravel入門 第2版 について

Laravelを独学で学ぶにあたり、評判がよかったのでAmazon Kindleで購入しました。
内容も色々な方法が書いてあるので、Laravelをはじめて勉強される方にはおすすめの本です。

Amazon リンク
https://www.amazon.co.jp/gp/product/B08625YD7H/ref=ppx_yo_dt_b_d_asin_image_o09?ie=UTF8&psc=1

図式化について

学習中に、文字だけだとイメージが掴みづらかったので、自分の為に作成したものです。
また方法が色々あり過ぎて混乱したので、整理する意味もあります。
ディレクトリを覚えるのにも使いました。

コードは必要なものだけ抜粋しているので、全てではありません。
これだけ見ても勉強にはならないので、PHPフレームワーク Laravel入門 第2版を是非購入してみて下さい。

※ちなみに著者の方とは何の関係もありません。

素人が作成した物なので、参考程度に使ってください。

バリデータの利用(クエリー文字列)

valiq.jpg

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

【Laravel 6.0】モデルのイベントを監視してデータ操作時のログを取る話

はじめに

データ変更や作成の度に個別にロギング処理を追加するのは面倒だったので、
オブザーバを使ってモデルのイベントを検知して、ログを出力してみました。

環境は「Laravel Framework 6.18.42」です。

本編

サービスプロバイダを追加

Artisanコマンド

まずはArtisanコマンドでObserverのサービスプロバイダを追加していきましょう。

[root@c10fd46073bc:/var/www#: php artisan make:provider ObserverServiceProvider
Provider created successfully.

サービスプロバイダの登録

   'providers' => [
        (中略)
        App\Providers\AppServiceProvider::class,
        App\Providers\AuthServiceProvider::class,
        // App\Providers\BroadcastServiceProvider::class,
        App\Providers\EventServiceProvider::class,
        App\Providers\RouteServiceProvider::class,
        App\Providers\ObserverServiceProvider::class, // 追加しました
],

モデルのオブザーバを設定

監視対象のモデルを追加したい場合は、コメント部分に追加します。

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;

class ObserverServiceProvider extends ServiceProvider
{
    /**
     * Register services.
     *
     * @return void
     */
    public function register()
    {
        //
    }

    /**
     * Bootstrap services.
     *
     * @return void
     */
    public function boot()
    {
        // 監視するモデルとオブザーバのペアを適宜追加する
        \App\Models\Wallet::observe(\App\Observers\Models\WalletObserver::class);
    }
}

オブザーバの定義

今回はお財布モデルに適用してみます。
モデルの監視は複数に増えていくことを想定して、
Interface,Traitで共通化しておきました。

インターフェイスを実装

Laravel 6.x Eloquent:利用の開始に記載の
イベントのインターフェイスを定義します。

<?php

namespace App\Observers\Models;

interface ModelObserverInterface
{
    /**
     * Handle the model "created" event.
     *
     * @param $eloquent
     */
    public function created($eloquent);

    /**
     * Handle the model "updated" event.
     *
     * @param $eloquent
     */
    public function updated($eloquent);
}

オブザーバのトレイトを作成

Log::infoの部分はお好きなログ出力に書き換えてください。

<?php

namespace App\Observers\Models;

use Illuminate\Support\Facades\Log;

trait ModelObserveLoggable
{
    /**
     * Handle the model "created" event.
     *
     * @param $eloquent
     */
    public function created($eloquent)
    {
        // 出力サンプル
        // [WalletObserver]:App\Observers\Models\ModelObserveLoggable::created{'data'=> 'データ'}
        Log::info(("[$this->name]:".__METHOD__),$eloquent->toArray());
    }

    /**
     * Handle the model "updated" event.
     *
     * @param $eloquent
     * @return void
     */
    public function updated($eloquent)
    {
        // 出力サンプル
        // [WalletObserver]:App\Observers\Models\ModelObserveLoggable::updated{'data'=> 'データ'}
        Log::info(("[$this->name]:".__METHOD__),$eloquent->toArray());
    }
}

お財布モデルのオブザーバを定義

app.php
<?php

namespace App\Observers\Models;

use App\Observers\Models\ModelObserverInterface;
use App\Observers\Models\ModelObserveLoggable;

class WalletObserver implements ModelObserverInterface
{
    use ModelObserveLoggable;

    // モデル名に書き換え
    protected $name = 'WalletObserver';
}

出力ログ確認

$wallet->create()$wallet->update()を実行すると、
無事に以下のようなログが出力されました。

laravel.log
[2020-10-21 18:40:43] local.INFO: [WalletObserver]:App\Observers\Models\ModelObserveLoggable::created {"user_id":1,"name":"作ったお","id":100} 
[2020-10-21 18:44:53] local.INFO: [WalletObserver]:App\Observers\Models\ModelObserveLoggable::updated {"id":101,"user_id":1,"name":"変更したお"} 

おわりに

検知するオブザーバのメソッドをTrait化しているため、簡単に使い回しができるかと思います。

監視したいモデルのオブザーバをクラスファイルを追加して、
ObserverServiceProviderにモデルとオブザーバを紐付けするだけで、
モデルのデータベースの変更などイベント等をロギングすることができました。

参考

Laravel 6.x Eloquent:利用の開始

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