読み込みが終了しない場合は、しばらく待つか、リロードを行なってください。
If loading does not finish, wait for a while or reload.
エンジニア向けの情報を発信するブログです。
どなたでも発信できます。
お好きに利用していただれば幸いです。

📁 root/app/Http/Controllers/ArticleController.php
<?php
use Illuminate\Support\Facades\Validator;
// ...省略
public function create(Request $request)
{
// 👇こっから
$validator = Validator::make($request->all(), [
'title' => [
'required',
'string',
'max:25',
],
'content' => [
'required',
'string',
'max:4000',
],
'tag' => [
'nullable',
'string',
],
]);
$validator->validate();
// 👆ここまでのやつ
$id = $request->get('id');
$article = Article::find($id);
//...省略
return redirect()->route('article.show', ['id' => $article->id]);
}
📁 root/resources/views/article/new.blade.php
@extends('layouts.app')
@section('content')
<form action="{{route('article.create')}}" method="post">
@csrf
<input type="hidden" name="id" value="{{$id ?? null}}">
<div class="form-row">
<div class="form-group col-sm-6">
<label>Title</label>
<input
name="title"
type="text"
value="{{old('title', $title ?? null)}}"
class="form-control
@error ('title') is-invalid @enderror"
>
@error('title')
<ul class="invalid-feedback">
@foreach ($errors->get('title') as $message)
<li>
{{$message}}
</li>
@endforeach
</ul>
@enderror
</div>
<div class="form-group col-sm-6">
<label>Tag</label>
<input
type="text"
name="tag"
value="{{old('tag', $tag ?? null)}}"
class="form-control @error ('tag') is-invalid @enderror"
placeholder="separated by ,"
>
@error('tag')
<ul class="invalid-feedback">
@foreach ($errors->get('tag') as $message)
<li>
{{$message}}
</li>
@endforeach
</ul>
@enderror
</div>
</div>
<div class="form-row">
<div class="form-group col-sm-6">
<label>Content</label>
<textarea
name="content"
cols="30"
rows="10"
class="form-control @error ('content') is-invalid @enderror"
>{{old('content', $content ?? null)}}</textarea>
@error('content')
<ul class="invalid-feedback">
@foreach ($errors->get('content') as $message)
<li>
{{$message}}
</li>
@endforeach
</ul>
@enderror
</div>
<div class="form-group col-sm-6 d-flex align-items-end">
<input type="submit" class="btn btn-primary">
</div>
</div>
</form>
@endsection

$validator = Validator::make($request->all(), [
'title' => [
'required',
'string',
'max:25',
],
'content' => [
'required',
'string',
'max:4000',
],
'tag' => [
'nullable',
'string',
],
// 👇 これ
])->after(function (\Illuminate\Contracts\Validation\Validator $validator) {
if (empty($validator->failed())) { // 👈 ルールの検証で問題なければ
$params = $validator->getData(); // 👈 値を取得
if ($params['title'] !== 'おすおす') {
// 👇 titleを指定してエラーメッセージを設定
$validator->errors()->add('title', 'おすおすちゃうやん');
}
}
});
$validator->validate();

$validator = Validator::make($request->all(), [
'title' => [
'required',// 👈 これ
'string',
'max:25',
],
'content' => [
'required',
'string',
'max:4000',
],
'tag' => [
'nullable',
'string',
],
],[
'title.required' => '(゚∀゚ )おすおす',// 👈 これ
])->after(function (\Illuminate\Contracts\Validation\Validator $validator) {
if (empty($validator->failed())) {
$params = $validator->getData();
if ($params['title'] !== 'おすおす') {
$validator->errors()->add('title', 'おすおすちゃうやん');
}
}
});

$validator = Validator::make($request->all(), [
'title' => [
'required',
'string',
'max:25',
],
'content' => [
'required',
'string',
'max:4000',
],
'tag' => [
'nullable',
'string',
],
],[
// 👇 これ
'title.required' => ':attributeは(゚∀゚ )おすおす',
])->after(function (\Illuminate\Contracts\Validation\Validator $validator) {
if (empty($validator->failed())) {
$params = $validator->getData();
if ($params['title'] !== 'おすおす') {
$validator->errors()->add('title', 'おすおすちゃうやん');
}
}
});
:attribute
<input
name="title" // 👈 こいつ
type="text"
value="{{old('title', $title ?? null)}}"
class="form-control
@error ('title') is-invalid @enderror"
>

])->after(function (\Illuminate\Contracts\Validation\Validator $validator) {
if (empty($validator->failed())) {
$params = $validator->getData();
if ($params['title'] !== 'おすおす') {
// 👇 これ
$validator->errors()->add('title', ':attributeはおすおすちゃうやん');
}
}
});

$validator = Validator::make($request->all(), [
'title' => [
'required',
'string',
'max:25',
],
'content' => [
'required',
'string',
'max:4000',
],
'tag' => [
'nullable',
'string',
],
],[
'title.required' => ':attributeは(゚∀゚ )おすおす',
])->after(function (\Illuminate\Contracts\Validation\Validator $validator) {
if (empty($validator->failed())) {
$params = $validator->getData();
if ($params['title'] !== 'おすおす') {
$validator->errors()->add('title', 'おすおすちゃうやん');
}
}
// 👇 これ
})->setAttributeNames([
'title' => 'タイトル',
]);
setAttributeNames()

$validator->validate();
// 👇リダイレクトする前に追加の処理をしたい場合下記のように書き換え
if ($validator->fails()) {
// 追加の処理追加
return redirect()
->back()// 👈 直前の画面へ
->withInput()// 👈 投げた値の保持
->withErrors($validator);// 👈 エラーメッセージの保持
}