This gist will help understand custom (artisan make:rule MyRule
) dynamic (rules that require more context than just the attribute and value) validation rules for Laravel 5.5+.
Last active
April 19, 2021 19:21
-
-
Save ralphschindler/dd0fe234b1afab37250feea7d948e2df to your computer and use it in GitHub Desktop.
Custom Dynamic Validation Rules for Laravel 5.5+
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
namespace App\Rules; | |
use Illuminate\Contracts\Validation\Rule; | |
class StringIsLengthRule implements Rule | |
{ | |
protected $length; | |
protected $message = 'The string must be greater than the length'; | |
public function __construct($length) | |
{ | |
$this->length = $length; | |
} | |
public function passes($attribute, $value) | |
{ | |
if (!$this->length || $this->length <= 0) { | |
$this->message = 'The length has to be greater than zero to validate the string'; | |
return false; | |
} | |
return strlen($value) > $this->length; | |
} | |
public function message() | |
{ | |
return $this->message; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
namespace App\Http\Controllers; | |
use App\Http\Requests\StringTesterRequest; | |
class StringTesterController extends Controller | |
{ | |
public function form() | |
{ | |
/** | |
* Assume the form is: | |
* <form method="POST" action="/string-tester"> | |
* {{ csrf_field() }} | |
* Length: <input name="length"><br> | |
* String: <input name="string"><br> | |
* <button>Submit</button> | |
* </form> | |
*/ | |
return view('form'); | |
} | |
public function process(StringTesterRequest $request) | |
{ | |
// reshow form, the form also has dump($request) in it for demonstration | |
return view('form', compact('request')); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
namespace App\Http\Requests; | |
use App\Rules\StringIsLengthRule; | |
use Illuminate\Foundation\Http\FormRequest; | |
class StringTesterRequest extends FormRequest | |
{ | |
public function authorize() | |
{ | |
return true; | |
} | |
public function rules() | |
{ | |
$rules = [ | |
'length' => 'required|numeric', | |
'string' => [ | |
'required', | |
new StringIsLengthRule($this->request->get('length')) | |
], | |
]; | |
return $rules; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment