お世話になっております。
Laravelで掲示板を作成しており、その中で投稿に絵文字が使われた際エラーを返すのではなく
バリデーション時に絵文字を削除する仕様にしたいと思いました。
掲示板投稿用のblade内、formのname属性は 投稿タイトルが title、本文が contentとなっています。
まず、リクエストフォームにprepareForValidation()を使って以下のようにしました。
protected function prepareForValidation() { //絵文字を削除する $title = preg_replace('/[\xF0-\xF7][\x80-\xBF][\x80-\xBF][\x80-\xBF]/', '', $this->title); $content = preg_replace('/[\xF0-\xF7][\x80-\xBF][\x80-\xBF][\x80-\xBF]/', '', $this->content); $this->merge([ 'title' => $title, 'content' => $content, ]); }
すると、タイトルは正常に絵文字が削除されるのに対し、本文はなぜか
_token=djIdQ11JSl1YEy・・・・
というコードが表示されてしまいます。
ログ出しをしたところ、$this->content の取得内容自体が
local.DEBUG: 投稿処理前$this->content: _token=djIdQ11JSl1YEymRbesg6RGWBvjgHV4MCkPPCUNV&title=%E3%81%A9%E3%81%86%E3%81%A0%F0%9F%98%87%E3%81%A8%E3%81%8B%F0%9F%91%80%E3%81%A8%E3%81%8B&post_content=%F0%9F%98%87%E3%81%A8%E3%81%8B%F0%9F%91%80%E3%81%A8%E3%81%8B
のようになっており、$this->titleの場合と全く違うものが取得されているのだと分かりました。
結局バリデーション前後に処理を挟むのをやめて、
コントローラー側で同じような処理をしたところ、今度は理想通り絵文字だけが削除されました。
質問なのですが、prepareForValidation()内での$this->contentとは、bladeフォーム内name属性のcontent、ではなくフォームの内容全体を取得してしまうのでしょうか?
prepareForValidation()で$this->contentにて本文を取得したい場合、どのように記述すれば良いのでしょうか。
何卒よろしくお願いいたします。
Laravel 6.8
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/11/28 06:30