@@ -422,6 +422,48 @@ public function testDisplayableValuesAreReplaced()
422
422
$ this ->assertEquals ('type must be included in Short, Long. ' , $ v ->messages ()->first ('type ' ));
423
423
}
424
424
425
+ public function testDisplayableAttributesAreReplacedInCustomReplacers()
426
+ {
427
+ $ trans = $ this ->getIlluminateArrayTranslator ();
428
+ $ trans ->addLines (['validation.alliteration ' => ':attribute needs to begin with the same letter as :other ' ], 'en ' );
429
+ $ trans ->addLines (['validation.attributes.firstname ' => 'Firstname ' ], 'en ' );
430
+ $ trans ->addLines (['validation.attributes.lastname ' => 'Lastname ' ], 'en ' );
431
+ $ v = new Validator ($ trans , ['firstname ' => 'Bob ' , 'lastname ' => 'Smith ' ], ['lastname ' => 'alliteration:firstname ' ]);
432
+ $ v ->addExtension('alliteration ' , function ($ attribute , $ value , $ parameters , $ validator ) {
433
+ $ other = array_get ($ validator ->getData (), $ parameters [0 ]);
434
+
435
+ return $ value {0 } == $ other {0 };
436
+ });
437
+ $ v ->addReplacer ('alliteration ' , function ($ message , $ attribute , $ rule , $ parameters , $ validator ) {
438
+ return str_replace (':other ' , $ validator ->getDisplayableAttribute ($ parameters [0 ]), $ message );
439
+ });
440
+ $ this ->assertFalse ($ v ->passes ());
441
+ $ v ->messages ()->setFormat (':message ' );
442
+ $ this ->assertEquals ('Lastname needs to begin with the same letter as Firstname ' , $ v ->messages ()->first ('lastname ' ));
443
+
444
+ $ trans = $ this ->getIlluminateArrayTranslator ();
445
+ $ trans ->addLines (['validation.alliteration ' => ':attribute needs to begin with the same letter as :other ' ], 'en ' );
446
+ $ customAttributes = ['firstname ' => 'Firstname ' , 'lastname ' => 'Lastname ' ];
447
+ $ v = new Validator ($ trans , ['firstname ' => 'Bob ' , 'lastname ' => 'Smith ' ], ['lastname ' => 'alliteration:firstname ' ]);
448
+ $ v ->addCustomAttributes ($ customAttributes );
449
+ $ v ->addExtension('alliteration ' , function ($ attribute , $ value , $ parameters , $ validator ) {
450
+ $ other = array_get ($ validator ->getData (), $ parameters [0 ]);
451
+
452
+ return $ value {0 } == $ other {0 };
453
+ });
454
+ $ v ->addReplacer ('alliteration ' , function ($ message , $ attribute , $ rule , $ parameters , $ validator ) {
455
+ return str_replace (':other ' , $ validator ->getDisplayableAttribute ($ parameters [0 ]), $ message );
456
+ });
457
+ $ this ->assertFalse ($ v ->passes ());
458
+ $ v ->messages ()->setFormat (':message ' );
459
+ $ this ->assertEquals ('Lastname needs to begin with the same letter as Firstname ' , $ v ->messages ()->first ('lastname ' ));
460
+
461
+ $ trans = $ this ->getIlluminateArrayTranslator ();
462
+ $ trans ->addLines (['validation.alliteration ' => ':attribute needs to begin with the same letter as :other ' ], 'en ' );
463
+ $ customAttributes = ['firstname ' => 'Firstname ' , 'lastname ' => 'Lastname ' ];
464
+ $ v = new Validator ($ trans , ['firstname ' => 'Bob ' , 'lastname ' => 'Smith ' ], ['lastname ' => 'alliteration:firstname ' ]);
465
+ }
466
+
425
467
public function testCustomValidationLinesAreRespected ()
426
468
{
427
469
$ trans = $ this ->getIlluminateArrayTranslator ();
0 commit comments