- 投稿日:2020-06-03T21:10:55+09:00
x-serverでcronを実装する方法
自分が実装する際になかなか良い情報に出会えずかなり時間がかかったので備忘録も兼ねて残しておきます。
今回はフレームワークにlaravelを使用したCRON実装法を解説していきます。
まず初めにLaravelのドキュメントでは、以下のように設定すれば良いと書いています。
* * * * * php /path/to/artisan schedule:run >> /dev/null 2>&1しかし、これをx-serverのcron設定コマンドに書いたところでなにも動きません。。。
X-serverではこのような記述はできないようです。。。
じゃあどうするのって躓いているあなたに向けて実装法について解説していきます。
3ステップでめちゃめちゃ簡単です。
1.シェルスクリプトの作成
以下のコードを書いたファイルを作成します。
sh_test.sh#!/bin/sh /usr/bin/php7.3/home/サーバーID/独自ドメイン名/laravel/artisan schedule:run
laravelディレクトリ直下に作成したファイルを置きます。
※phpのバージョンは環境に合わせて適宜変更してください。
拡張子が.shであればファイル名は何でもいいです。
2.shファイルの権限を755に変更
権限を変更しないとx-server側でCRONを実行してくれません。
以下のコマンドで権限を755に変更できます。
chmod 755 test_file実行できたら以下のコマンドで権限の確認ができます。
ls -l sh_test.sh-rwxr-xr-x と表記されていたら成功です。
以下リンクに詳細が書いてあるので参考にしてみてください。
3.x-server側でのCRON設定
ここまでできたらあとはCRONの設定をするのみです。
設定後はアドレスを追加してみて実行結果を確認してみてください。(無料会員はメール通知機能を使えないです。)
以上がx-serverでCRONを実装する方法でした。
- 投稿日:2020-06-03T21:10:55+09:00
x-serverでcronを実装する方法【3ステップで簡単に】
自分が実装する際になかなか良い情報に出会えずかなり時間がかかったので備忘録も兼ねて残しておきます。
今回はフレームワークにlaravelを使用したCRON実装法を解説していきます。
まず初めにLaravelのドキュメントでは、以下のように設定すれば良いと書いています。
* * * * * php /path/to/artisan schedule:run >> /dev/null 2>&1しかし、これをx-serverのcron設定コマンドに書いたところでなにも動きません。。。
X-serverではこのような記述はできないようです。。。
じゃあどうするのって躓いているあなたに向けて実装法を解説していきます。
3ステップでめちゃめちゃ簡単です。
1.シェルスクリプトの作成
以下のコードを書いたファイルを作成します。
sh_test.sh#!/bin/sh /usr/bin/php7.3/home/サーバーID/独自ドメイン名/laravel/artisan schedule:run
laravelディレクトリ直下に作成したファイルを置きます。
※phpのバージョンは環境に合わせて適宜変更してください。
拡張子が.shであればファイル名は何でもいいです。
2.shファイルの権限を755に変更
次に権限を変更しないとx-server側でCRONを実行してくれません。
以下のコマンドで権限を755に変更できます。
chmod 755 test_file実行できたら以下のコマンドで権限の確認ができます。
ls -l sh_test.sh-rwxr-xr-x と表記されていたら成功です。
以下リンクに詳細が書いてあるので参考にしてみてください。
3.x-server側でのCRON設定
最後はCRONの設定をするのみです。
以下を参考に設定してみてください。
設定後はアドレスを追加し実行結果を確認してみてください。(無料会員はメール通知機能を使えません。)
以上がx-serverでCRONを実装する方法でした。
- 投稿日:2020-06-03T20:26:43+09:00
MAMPのMySQLを利用するとことで面倒な環境構築せず、すぐにMySQL使えるように設定しよう!
まず、MAMPをダウンロードします。(無料)
https://www.mamp.info/en/downloads/
MAMP&MAMP PROをクリックしてダウンロード。ダウンロードしたら、インストールします。
インストール終了したら、アプリケーションに作成されます。
MAMPアイコンをMacのDockにドラッグ&ドロップしてショートカットの作成をオススメします。
アイコンをクリックすると起動します。
Start Serversをクリックすると緑色に点灯してMySQLが使えるようになります。
※Cloudは、赤く点灯しますが、無視してください。
MySQLが起動すると以下のphpMyAdminリンクにアクセスできます。
http://localhost:8888/phpMyAdmin/
phpMyAdminは、データベース、テーブル、カラムの作成、変更、削除が容易にできます。laravelの
.env
を設定しましょう。
デフォルトは、以下になっています。
DB_DATABASE=
データベース名を記述。
DB_PASSWORD=
Macの場合は、root
になります。
追加でDB_SOCKET=/Applications/MAMP/tmp/mysql/mysql.sock
を記述。phpMyAdminでデータベースを作成してみましょう。
新規作成をクリック。
データベース名を入力。
作成ボタンをクリックでデータベースが作成されました。
作成したデータベース名を
.env
のDB_DATABASE=
に記述。
ターミナルでmigrationします。
php artisan migrate設定したデータベースにmigrationされました。
phpMyAdminにアクセスして確認。
http://localhost:8888/phpMyAdmin/
作成したデータベース以下にmigrationされています。以上です。
参考になったら幸いです。
- 投稿日:2020-06-03T19:09:11+09:00
Laravel6にログイン機能を実装する
前回までに、WSL2+Docker+Laravel環境を構築した。その続き。
https://qiita.com/gochimonmon/items/e62c71fad9757c0ffcffnode, npmの最新版を導入
以下を参考に導入。各コマンドをappのDockerFileに書いておくでもOK、自分はそうした。
https://qiita.com/seibe/items/36cef7df85fe2cefa3eaログイン機能の実装
appのターミナルで実行。
composer require laravel/ui "^1.0" --dev php artisan ui vue --authここまで
npm i npm run dev
- 投稿日:2020-06-03T17:17:22+09:00
Field ' ' doesn't have a default value
Laravelの画像投稿機能実装時のエラー
画像投稿機能実装中に以下のエラーが表示された
Field 'user_id' doesn't have a default value
問題点1
posts controller storeアクションpublic function store(Request $request){ $validator = Validator::make($request->all(), [ 'file' => 'required|max:10240|mimes:jpeg,gif,png', 'content' => 'required|max:191' ]); if($validator->fails()){ return back()->withInput()->withErrors($validator); } $file = $request->file('file'); $path = Storage::disk('s3')->putFile('/', $file, 'public'); Post::create([ 'user_id' => \Auth::user()->id, 'image_file_name' => $path, 'content' => $request->content ]); return redirect('/'); }'user_id' => \Auth::user()->id,の一文が抜けていた
問題点2
Post Model Post.phpclass Post extends Model { protected $fillable =[ 'image_file_name', 'content', 'user_id' ]; }$fillableの中に 'user_id' を記入していなかったため。
以上の2点を解決後フォームから送信で無事に動作した。
マイグレーションファイルにuser_idと書いていたのに上記のファイル無いで設定していないために発生したエラーだった。
- 投稿日:2020-06-03T16:11:13+09:00
FileSystemでファイルクリアをすると結果が取得できなくて困ったこと
背景
特定のファイルをcleanするコードを書きたくて
$result = app('files')->put($this->pathFromInput('clean'), ''); $result_str = $result ? "success" : "failure"; \Log::info("{$this->pathFromInput('clean')} cleaned: {$result_str}.");みたいなコードを書いていたんですけど、ファイルの中身が消されてるのに結果がFalseで返ってきてておかしいなって思いました。
調査
なのでLaravelのコードをのぞいてみました。
https://github.com/laravel/framework/blob/7.x/src/Illuminate/Filesystem/Filesystem.php#L133-L136public function put($path, $contents, $lock = false) { return file_put_contents($path, $contents, $lock ? LOCK_EX : 0); }なんだ単に
file_put_contents
コールしてるだけなのね。PHPの方を調べてみよう。
https://www.php.net/manual/ja/function.file-put-contents.php#refsect1-function.file-put-contents-returnvaluesこの関数はファイルに書き込まれたバイト数を返します。 あるいは失敗した場合には FALSE を返します。 警告 この関数は論理値 FALSE を返す可能性がありますが、FALSE として評価される値を返す可能性もあります。 詳細については 論理値の セクションを参照してください。この関数の返り値を調べるには ===演算子 を 使用してください。...
0バイト書き込めば0が返ってくるから実質FALSEになるので$result===0
と$result===''
で使い分けるということのようです。まとめ
建前
PHPはこういった想定外の落とし穴があるので注意しましょう。他の言語だとこういうのあんまりないと思います…。
本心
は??????マジで?????なにこのPHPの仕様クソすぎない????なんのためにboolがあるの????言語として破綻してない????酒飲みながら考えたみたいな仕様だな????
Java, C#, Objective C, Swift, Kotlin, JavaScript, Ruby, Python, Golang と触れてきたけどここまで書きにくい言語は初めてなので正直叫びたい。
PHP大っ嫌いだー!
- 投稿日:2020-06-03T14:54:13+09:00
【Laravel】ミドルウェア(Middleware)で任意のパラメータを渡す。
メモとして残します。
■やり方
ミドルウェア呼び出し側
下記の例ではルーティングでミドルウェアを呼び出しているが、基本的には変わらない(はず)
//複数の場合、第二パラメータ以降はカンマで区切る Route::middleware('my_middleware:引数1,引数2')->group(function () { });ミドルウェア(my_middleware)側
ミドルウェアの第二引数$nextの次に任意のパラメータを入れる引数を定義する。
namespace App\Http\Middleware; use Closure; class MyMiddleware { public function handle($request, Closure $next, $arg1="", $arg2="") { //$arg1=引数1 //$arg2=引数2 return $next($request); } }
- 投稿日:2020-06-03T14:23:43+09:00
LaravelでエラーログをSlackに投稿したい
エラーログをSlackに投稿したい
G'sAcademyで出会った同期とチームで開発していたWebアプリケーション「HomeYou」を
最近リリースしました!それに伴ってエラー発生時にSlackに通知を送りたいと思い、試してみたところ
とても簡単にできたので、その方法を今回は書き留めていこうと思います。リリースした「HomeYou」について...
と、その前に簡単にリリースしたアプリについても軽ーく説明させてもらいます。
今回リリースしたのは、
Twitterアカウントに匿名でレビュー(メッセージ)を残すことができる
「HomeYou(ホームユー)」というWebアプリケーションです。SNSは、私たちの生活にとって切っても切れない関係になってきましたが、
リアルな交友関係とも繋がっていて踏みこんだことを発信するのは照れくさかったり、
自分のフィードに投稿が残ってしまい、時間が経つとどこか恥ずかしかったり、
また一方で、最近は誹謗・中傷が問題になっていたりと、
いろんな問題を抱えているな〜という課題感から
自由に自分の想いを投稿できて、かつ優しい世界を実現したいという想いから作ったサービスです。HomeYouは、Twitterアカウントに対するレビュー(メッセージ)の匿名投稿、
そして、独自のNGワードでのフィルタリングなどがメインの機能となります。
また、心温まるレビューは、サービスを運営する私たちが投稿者の代わりにその相手へお伝えしていきます。好きなアーティストへの熱い気持ちや
直接伝えるのは恥ずかしい身近な誰かに対するちょっとした感謝の気持ちなどを
気軽に投稿して遊んでみてください〜^^
(※投稿にはTwitterアカウントでのログインが必要です!)では、次のセクションからエラーログをSlackに投稿する手順のお話をしていきます!
Slack通知の設定手順
①Incoming webhook URLを取得
②config/logging.phpと.env設定こんな感じでとてもシンプルです!
Laravel5.6から標準でSlackへの通知ができるようになっており、
簡単に設定ができますので、個人でアプリを開発している方などは非常に便利だと思います。手順① Incoming webhook URLを取得
(公式)Slack での Incoming Webhook の利用に記載の手順でIncoming webhook URLの取得を行います。(画像の赤枠の部分を使用します!)
【参考ページ】
(公式)Slack API
slackのIncoming webhookが新しくなっていたのでまとめてみた手順② config/logging.phpと.env設定
続いてlaravelのプロジェクトの設定を行っていきます。
.envファイル
まず.envファイルに先ほど取得したIncoming webhook URLとログレベルを追記します。
今回はエラーが発生した際に通知をしたいのでerrorとしていますが、
他にemergency、alert、critical、warning、notice、info、debugなどがあります。
(公式)Laravelログシステムの設定LOG_SLACK_WEBHOOK_URL=https://hooks.slack.com/services/xxxx // 先程取得したIncoming webhook LOG_SLACK_LEVEL=error // 通知したいログレベルconfig/logging.php
続いて、config/logging.phpを一部変更していきます。
①'stack'=> ['channels' => ['single']
の部分に'slack'
を追加します。
②'slack'=> ['level' => ['critical']
の部分をenv('LOG_SLACK_LEVEL', 'critical'),
と変更し、.envファイルから引っ張ってくるようにします。また、.envファイル等を更新したので、
php artisan config:cache
をお忘れなく!
変更後は、下記通りです。config/logging.php'channels' => [ 'stack' => [ 'driver' => 'stack', 'channels' => ['single','slack'], 'ignore_exceptions' => false, ], //省略 'slack' => [ 'driver' => 'slack', 'url' => env('LOG_SLACK_WEBHOOK_URL'), 'username' => 'Laravel Log', 'emoji' => ':boom:', 'level' => env('LOG_SLACK_LEVEL', 'critical') ], ]すると、Controllerで何らかのエラーが起きた時に
こんなエラーログがSlackに送られてくるようになります。
(※今回が定義していない関数を返してみました。)
さらに、Slackに投稿されるログのフォーマットをカスタマイズすることができます!
'short' => true
を追記してみます。config/logging.php'slack' => [ 'driver' => 'slack', 'url' => env('LOG_SLACK_WEBHOOK_URL'), 'username' => 'Laravel Log', 'emoji' => ':boom:', 'level' => env('LOG_SLACK_LEVEL', 'critical'), 'short' => true, // 短めなフォーマット ]さらに短くしたい場合は、、、
'context' => false
を追記してください。config/logging.php'slack' => [ 'driver' => 'slack', 'url' => env('LOG_SLACK_WEBHOOK_URL'), 'username' => 'Laravel Log', 'emoji' => ':boom:', 'level' => env('LOG_SLACK_LEVEL', 'critical'), 'short' => true, // 短めなフォーマット 'context' => false // context部分を表示しない ]そうすると詳細部分が全く表示されなくなります。この辺はお好みで・・・!
ただ、このままだと開発環境でのエラー等も通知がきてしまうため、
開発時の.envファイルはLOG_CHANNEL
の部分をsingle
に変更しておくと良いと思います!.envLOG_CHANNEL=singleこんな感じで簡単にSlackにログの投稿ができるようになりました!
よかったらHomeYouも使ってみてください^^Twitterアカウントに匿名でレビュー(メッセージ)を残すことができる「HomeYou」
参考ページ
(公式)Slack API
(公式)Slack での Incoming Webhook の利用
slackのIncoming webhookが新しくなっていたのでまとめてみた
(公式)Laravelログシステムの設定
- 投稿日:2020-06-03T14:10:18+09:00
UNIX時間(UNIX TIMESTAMP / タイムスタンプ)を普通の日付と時間に変換しながらランダムな日時を自動生成する
ランダムな日付だけでなくランダムな時刻も同時に生成
こんにちは。2038年問題まであと18年ですね。
今回は適当な日付と時間をランダムに作るPHPのコードサンプルです。
一応2038年問題も考慮して、date関数などは使わずにやりたいと思います。DateTimeクラスを使えばいいじゃない...という意見もありますが、フレームワークやライブラリが使えるなら「むしろCarbonでいいじゃない」ということでCarbonを使っております。
Laravelとかではお馴染みですね。CarbonはDateTimeクラスをオーバーラップした日付操作ライブラリなので、DateTimeクラスの上位互換と言えそうです。
仮に、何かしらのテスト用データを大量に挿入しつつ、更新日時をランダムに生成したいとします。Laravelのseedsにそういったコードを書いてみます。
ProductsTableSeeder.php<?php use Illuminate\Database\Seeder; // Carbonを使うための宣言 use Carbon\Carbon; // Products(商品)テーブルというものがあるとする class ProductsTableSeeder extends Seeder { /** * Run the database seeds. * * @return void */ public function run() { // ランダムに生成したい日時の期間を決める // 仮に 2001-01-01 00:00:00 から 2020-05-01 23:59:59 とする // 日付と時刻を format('U') でUNIXタイムスタンプへ変換しておく $start = new Carbon('2001-01-01 00:00:00'); $startUnix = $start->format('U'); // 978274800 に変換される $end = new Carbon('2020-05-01 23:59:59'); $endUnix = $end->format('U'); // 1588345199 に変換される // ループで id=1 から id=1000 までの商品を自動で登録 for($i=1;$i<=1000;$i++){ // 用意しておいた開始・終了日時のUNIXタイムスタンプを使用してランダムな数値を生成 $randDate = mt_rand($startUnix, $endUnix); // ランダムなUNIXタイムスタンプを引数にしてインスタンスを作成 $date = new Carbon($randDate); DB::table('products')->insert([ 'id' => $i, 'name' => '商品名_'.$i, 'created_at' => '2001-01-01 00:00:00', // 日付&時刻は必要に応じてフォーマットを変更可 'updated_at' => $date->format('Y-m-d H:i:s'), ]); } } }日付や時間のフォーマットは基本的に
date()
の関数と同じパラメータが使えます。
date() -> パラメータ formatなお乱数を発生させるときは
rand()
ではなくmt_rand()
を使う方が実行速度も速くて良いそうです。(randの4倍以上)
暗号化に使うのはいずれも推奨されませんが、文字通りランダムな値を得るためだけであれば問題ありません。参考URL:
rand — 乱数を生成する
mt_rand — メルセンヌ・ツイスター乱数生成器を介して乱数値を生成する
【PHP入門】ランダムな数値・文字列を生成する(rand、mt_rand)
date — ローカルの日付/時刻を書式化する
DateTime クラス
テストデータ用にランダムな日付文字列をn個生成する
特定の2つの日付の間から、ランダムに1日を取得
【PHP】DateTimeでの日時取得とフォーマット方法まとめ
PHPで2038年問題を回避するには?すぐできる対策とコード例
「2038年問題」を華麗に解決!~エンジニアの仕事~
DateTimeクラスで日付文字列とUNIX時間(タイムスタンプ)を相互変換するときのまとめ
DateTime クラスのまとめメモ
PHPで日付時刻処理を書くならCarbonを使うべき
- 投稿日:2020-06-03T13:13:23+09:00
Laravelの動的whereを活用する
動的whereとは
Laravelでクエリを構築する場合、以下のように条件を指定すると思います。
//名前が「fuga」で、年齢が30歳のレコードを1件取得 Hoge::where('name', '=', 'fuga')->where('age', '=', 30)->first();このクエリは、以下のように書くこともできます。
Hoge::whereName('fuga')->whereAge(30)->first();つまり、
whereXxxx('fuga')
というメソッド名にすることで、where('xxxx', '=', 'fuga')
と同等に使うことができます。
使えるのは=
判定のみですが、少しだけ行を短くすることができます。応用
複数のカラムに対して同時に指定することも可能です。
Hoge::whereNameAndAge('fuga', 30)->first();こう書いても冒頭のクエリと同じ意味になります。
And
ではなくOr
で繋ぐことで、OR条件にすることもできます。
同じカラム名でも大丈夫です。Hoge::whereNameOrNameAndAge('fuga', 'piyo', 25)->first();
And
|Or
で繋いでいけば何個でもカラムを指定できます。注意点
すでに存在するメソッドの場合、うまく動作しません。
例えば、\Illuminate\Database\Eloquent\Builder
にはwhereKey
というメソッドが存在するため、key
というカラムに対して、whereKey
という動的whereは使用できません。1
class Hoge
にwhereXxxx
というカラムがすでに存在した場合も、そちらが呼ばれるため動的な処理は行われません。やりすぎにも注意です。
whereNameAndAge('fuga', 25)
よりも、whereName('fuga')->whereAge(25)
と書いてあったほうが、意味がわかりやすいかな?と思ったなら、そっちを選択してください。
動的whereが常に優れているわけではなく、選択肢が増えただけだと思っていただけると良いかと思います。補足
whereXxxx
というメソッドは当然実際には存在せず、動的に処理を行っているため、そのままだとIDEでエラーになります。
なので、class Hoge
のPHPDocにちゃんとメソッドを追加しておきましょう。/** * @method static \Illuminate\Database\Eloquent\Builder|\App\Eloquents\Hoge whereXxxx($value) */
ほかのカラムとの組み合わせなら可能。
whereKeyAndId
みたいな ↩
- 投稿日:2020-06-03T12:31:22+09:00
DockerでつまづくLaravel Dusk何なのお前
色々事情があってブラウザテストすることになったんですよ。
そう言えばLaravelには「Dusk」っていうイカしたブラウザテストユニットがあったなとか思い出して、試しに使ってみました。
https://readouble.com/laravel/5.5/ja/dusk.html↑のドキュメント通り、duskをインストールし、動かしてみたら
# php artisan dusk Cannot load Xdebug - it was already loaded Cannot load Xdebug - it was already loaded PHPUnit 6.5.14 by Sebastian Bergmann and contributors. E 1 / 1 (100%) Time: 1.29 seconds, Memory: 16.00MB There was 1 error: 1) Tests\Browser\ExampleTest::testBasicExample Facebook\WebDriver\Exception\UnknownServerException: unknown error: cannot find Chrome binary (Driver info: chromedriver=2.35.528139 (47ead77cb35ad2a9a83248b292151462a66cd881),platform=Linux 4.19.76-linuxkit x86_64)は? chromeのバイナリがないだと?
いい忘れてたけど、環境
OS/ミドルウェア/FW バージョン CentOS 7.5 Apache 2.4.6 php 7.2.28 Laravel 5.5.46 これをDockerで組んでます。
chromeを入れてみる
んじゃ、素直に入れてみますかね。
CentOSはepel入れるとchromiumを入れることができるようになります。$ yum install -y epel-release $ yum install -y chromiumよしよし、うごかしてみっかー。んー、なかなか応答が返ってこないなー、、、お、今度は
/session
がダメとか言ってくるなー。1) Tests\Browser\AdminTest::testTop Facebook\WebDriver\Exception\WebDriverCurlException: Curl error thrown for http POST to /session with params: {"desiredCapabilities":{"browserName":"chrome","platform":"ANY","chromeOptions":{"binary":"","args":["--disable-gpu","--headless"]}}}--no-sandbox を入れてみる
なんか調べども調べども
seleniumコンテナ入れろ
みたいなのばっかなんですよね。なんか負けたような気がするじゃないですか。気の所為でしょうけど。んで、たどり着いたのはこちら。
Laravel DuskをDockerコンテナ内で起動するまでなんと、
--no-sandbox
フラグを付けるだけだと……!?
DuskTestCase.php
に追記しましょ。DuskTestCase.phpprotected function driver() { $options = (new ChromeOptions)->addArguments([ '--disable-gpu', '--headless', '--no-sandbox', //追記 ]); return RemoteWebDriver::create( 'http://localhost:9515', DesiredCapabilities::chrome()->setCapability( ChromeOptions::CAPABILITY, $options ) ); }よし、これで動いた!
- 投稿日:2020-06-03T10:43:46+09:00
【Laravel】Homestead環境のファイルアップロード上限サイズを変更する
環境
- Laravel Homestead 9.5.1
- nginx 1.15.8
- PHP 7.4.5
Nginxが返す413エラーを解消する
sudo vi /etc/nginx/nginx.conf
追記
/etc/nginx/nginx.conf... http { ... ## # Other Configs ## client_max_body_size 200m; } ...適用
sudo service nginx restart
Laravelが返す413エラーを解消する
Whoopsって言われるのでPHPの設定を変更する
※/etc/php/7.4/cli/php.iniは編集しても意味ないので注意
sudo vi /etc/php/7.4/fpm/php.ini
変更
/etc/php/7.4/fpm/php.ini(編集前)... post_max_size = 100M ... upload_max_filesize = 100M ...↓
/etc/php/7.4/fpm/php.ini(編集後)... post_max_size = 200M ... upload_max_filesize = 200M ...適用
sudo service php7.4-fpm restart
- 投稿日:2020-06-03T10:28:54+09:00
Laravel フォームリクエストを使用してバリデーションを指定したら403エラーが出た
目的
- フォームリクエスト(FormRequest)を使用してバリデーションを実装してブラウザから動作を確認したところルールにクリアしていても403エラーがでてしまい、当事象を解決した話をまとめる。
実施環境
- ハードウェア環境
項目 情報 OS macOS Catalina(10.15.3) ハードウェア MacBook Pro (16-inch ,2019) プロセッサ 2.6 GHz 6コアIntel Core i7 メモリ 16 GB 2667 MHz DDR4 グラフィックス AMD Radeon Pro 5300M 4 GB Intel UHD Graphics 630 1536 MB
- ソフトウェア環境
項目 情報 備考 PHP バージョン 7.4.3 Homwbrewを用いて導入 Laravel バージョン 7.0.8 commposerを用いて導入 MySQLバージョン 8.0.19 for osx10.13 on x86_64 Homwbrewを用いて導入 エラー内容
原因
- このフォームリクエストを送信するための認証情報が存在しないためエラーが発生していた。
本エラーをとにかく解決したい場合は当該のバリデーションルールが記載されているフォームリクエストクラスファイルを開きauthorizeメソッド内を修正する。
エラーの発生したフォームリクエストクラスファイルを下記に記載する。
アプリ名ディレクトリ/app/Http/Requests/StoreContentPost.php<?php namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; class StoreContentPost extends FormRequest { /** * Determine if the user is authorized to make this request. * * @return bool */ public function authorize() { return false; } /** * Get the validation rules that apply to the request. * * @return array */ public function rules() { return [ //バリデーションルールを記載する //'チェックするデータ名' => 'ルール1|ルール2'の様にルールを定義する 'title' => 'required', 'detail' => 'required', ]; } }エラーを解決したしたフォームリクエストクラスファイルを下記に記載する。
アプリ名ディレクトリ/app/Http/Requests/StoreContentPost.php<?php namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; class StoreContentPost extends FormRequest { /** * Determine if the user is authorized to make this request. * * @return bool */ public function authorize() { return true; } /** * Get the validation rules that apply to the request. * * @return array */ public function rules() { return [ //バリデーションルールを記載する //'チェックするデータ名' => 'ルール1|ルール2'の様にルールを定義する 'title' => 'required', 'detail' => 'required', ]; } }
- 投稿日:2020-06-03T09:50:10+09:00
Notification API + Laravel + Vue.js、 PWAで メッセージ機能を作る 作例編
概要
以前の 製作事例公開内容となりますが
会員メンバー間で、メッセージを送受信できる機能を
Laravel+ Vue でPWA対応、実装しました。
新着の自動更新は、JSタイマで起動し、
Notification API での通知等の仕組みとなります。参考のコード / GitHub
https://github.com/kuc-arc-f/lara58a_7message
構成
Progressive Web Apps / PWA
Notification API
Laravel 5.8
Vue.js
javascript
nginx
mysqlmigrations
画像
・受信一覧、
メールのような、受信、送信タブで切替表示としました実装など
・JSタイマー
定期実行、自分宛の送信メッセージを監視し、
新着があれば、トリガー発火して。新着通知等の処理を実行します。function set_time_text(){ var data = { 'user_id': USER_ID, 'type': 1, }; axios.post('/api-1234' , data).then(res => { var item = res.data if(item.id != null){ $("input#time_text").val( item.id ); $("input#message_title").val( item.title ); }else{ $("input#time_text").val( 0 ); } console.log( item ); }); } set_time_text(); var timer_func = function(){ set_time_text(); }; var TIMER_SEC = 1000 * 600; setInterval(timer_func, TIMER_SEC );・新着の通知
function display_notification(title, body ){ if (!('Notification' in window)) {//対応してない場合 alert('未対応のブラウザです'); } else { // 許可を求める Notification.requestPermission() .then((permission) => { if (permission === 'granted') {// 許可 var options ={ body: body, icon: 'https://hoge.net/icon.png', tag: '' }; var n = new Notification(title,options); console.log(n); setTimeout(n.close.bind(n), 5000); } else if (permission == 'denied') {// 拒否 } else if (permission == 'default') {// 無視 } }); } }参考のページ
https://knaka0209.hatenablog.com/entry/lara58_26message
.