Laravel is an open-source PHP framework devised to make developing web apps easier and faster through built-in features. These features are part of what makes Laravel so widely used by web developers.
Laravel includes a wide variety of beneficial validation rules that you can apply to data, even providing the ability to validate if values are unique in a given database table. Routing in Laravel allows you to route all your application requests to their appropriate controller. In this article, I will show you some laravel validation and routing tips. Hopefully, you can use them to supercharge your Laravel applications. Here we go!
Position placeholder in the validation messages
In Laravel 9 you can use the :position
placeholder in the validation messages if you're working with arrays.
This will output: "Please provide an amount for price #2"
class CreateProductRequest extends FormRequest
{
public function rules(): array
{
return [
'title' => ['required', 'string'];
'description' => ['nullable', 'sometimes', 'string'],
'prices' => ['required', 'array'],
'prices.*.amount' => ['required', 'numeric'],
'prices.*.expired_at' => ['required', 'date'],
];
}
public function messages(): array
{
'prices.*.amount.required' => 'Please provide an amount for price #:position'
}
}
New array validation rule required_array_keys
Laravel 8.82 adds a required_array_keys
validation rule. The rule checks that all of the specified keys exist in an array.
Valid data that would pass the validation:
$data = [
'baz' => [
'foo' => 'bar',
'fee' => 'faa',
'laa' => 'lee'
],
];
$rules = [
'baz' => [
'array',
'required_array_keys:foo,fee,laa',
],
];
$validator = Validator::make($data, $rules);
$validator->passes(); // true
Invalid data that would fail the validation:
$data = [
'baz' => [
'foo' => 'bar',
'fee' => 'faa',
],
];
$rules = [
'baz' => [
'array',
'required_array_keys:foo,fee,laa',
],
];
$validator = Validator::make($data, $rules);
$validator->passes(); // false
Route resources grouping
If your routes have a lot of resource controllers, you can group them and call one Route::resources()
instead of many single Route::resource()
statements.
Route::resources([
'photos' => PhotoController::class,
'posts' => PostController::class,
]);
Custom route bindings
Did you know you can define custom route bindings in Laravel?
In this example, I need to resolve a portfolio by slug. But the slug is not unique, because multiple users can have a portfolio named Foo
. So I define how Laravel should resolve them from a route parameter
class RouteServiceProvider extends ServiceProvider
{
public const HOME = '/dashboard';
public function boot()
{
Route::bind('portfolio', function (string $slug) {
return Portfolio::query()
->whereBelongsto(request()->user())
->whereSlug($slug)
->firstOrFail();
});
}
}
Route::get('portfolios/{portfolio}', function (Portfolio $portfolio) {
/*
* The $portfolio will be the result of the query defined in the RouteServiceProvider
*/
})
Mac validation rule
New mac_address validation rule added in Laravel 8.77
$trans = $this->getIlluminateArrayTranslator();
$validator = new Validator($trans, ['mac' => '01-23-45-67-89-ab'], ['mac' => 'mac_address']);
$this->assertTrue($validator->passes());
Validate email with TLD domain required
By default, the email validation rule will accept an email
without a TLD domain (ie: taylor@laravel
, povilas@ldaily
)
But if you want to make sure the email must have a TLD domain (ie: taylor@laravel.com
, povilas@ldaily.com
), use the email:filter
rule.
[
'email' => 'required|email', // before
'email' => 'required|email:filter', // after
],
Route view
You can use Route::view($uri , $bladePage)
to return a view directly, without having to use the controller function.
//this will return home.blade.php view
Route::view('/home', 'home');
These are some useful tips and tricks related to laravel Validation & Routing. I hope that by utilizing these tips, you will improve your code execution and usability. If you love them, then please follow us for more laravel & Vue js related news.
Follow Us on Twitter:
Top comments (0)