Laravel Validation provide closure base rule Validation.
On import excel i have rules() function below:
public function rules(): array{
//@NOTE:
//we use this regex to validate timeformat: "h:i:s A".
//looks like the validation cannot handle proper rule "date_format:h:i:s A".
$regexTimeFormat = 'regex:/^([0-9]{1,2})\:([0-9]{1,2})\:([0-9]{1,2})\s\w{2}$/';
$dateFormat = $this->dateformat;
$isAllowed = function ($attribute, $value, $fail) use($dateFormat){
$date = \Carbon\Carbon::createFromFormat($dateFormat, $value);
if (!allowUpadateOnDate($date)) {
$fail( str_replace(
':value',
$value,
trans('my/bauk/attendance/hints.validations.notAllowedByPeriode')
));
}
};
$isHoliday = function ($attribute, $value, $fail) use($dateFormat){
$date = \Carbon\Carbon::createFromFormat($dateFormat, $value);
$holiday = \App\Libraries\Bauk\Holiday::getHolidayName($date);
if ($holiday) {
$fail( str_replace(
[':value',':name'],
[$value, $holiday],
trans('my/bauk/attendance/hints.validations.holiday')
));
}
};
return [
'no' => ['required','numeric'],
'nip'=> ['required','numeric','exists:bauk.employees,nip'],
'date' => ['required','date_format:'.$dateFormat, $isAllowed, $isHoliday],
['fin'] => ['required',$regexTimeFormat],
'fout_1' =>['required',$regexTimeFormat],
'fout_2' =>['nullable',$regexTimeFormat],
'fout_3' =>['nullable',$regexTimeFormat],
// Above is alias for as it always validates in batches
'*.no' => ['required','numeric'],
'*.nip'=> ['required','numeric','exists:bauk.employees,nip'],
'*.date' => ['required','date_format:'.$dateFormat, $isAllowed, $isHoliday],
'*.fin' => ['required',$regexTimeFormat],
'*.fout_1' => ['required',$regexTimeFormat],
'*.fout_2' => ['nullable',$regexTimeFormat],
'*.fout_3' => ['nullable',$regexTimeFormat],
];
}
Try to upload, but i got error below
ErrorException: mb_strpos() expects parameter 1 to be string, object given in file D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\laravel\framework\src\Illuminate\Support\Str.php on line 107
Stack trace:
1. ErrorException->() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\laravel\framework\src\Illuminate\Support\Str.php:107
2. mb_strpos() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\laravel\framework\src\Illuminate\Support\Str.php:107
3. Illuminate\Support\Str->contains() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\maatwebsite\excel\src\Validators\RowValidator.php:131
4. Maatwebsite\Excel\Validators\RowValidator->formatRule() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\maatwebsite\excel\src\Validators\RowValidator.php:125
5. Maatwebsite\Excel\Validators\RowValidator->formatRule() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\maatwebsite\excel\src\Validators\RowValidator.php:112
6. Maatwebsite\Excel\Validators\RowValidator->Maatwebsite\Excel\Validators\{closure}() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\laravel\framework\src\Illuminate\Support\Collection.php:1111
7. Illuminate\Support\Collection->mapWithKeys() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\maatwebsite\excel\src\Validators\RowValidator.php:113
8. Maatwebsite\Excel\Validators\RowValidator->formatKey() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\maatwebsite\excel\src\Validators\RowValidator.php:99
9. Maatwebsite\Excel\Validators\RowValidator->rules() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\maatwebsite\excel\src\Validators\RowValidator.php:36
10. Maatwebsite\Excel\Validators\RowValidator->validate() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\maatwebsite\excel\src\Imports\ModelManager.php:166
11. Maatwebsite\Excel\Imports\ModelManager->validateRows() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\maatwebsite\excel\src\Imports\ModelManager.php:53
12. Maatwebsite\Excel\Imports\ModelManager->flush() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\maatwebsite\excel\src\Imports\ModelImporter.php:57
13. Maatwebsite\Excel\Imports\ModelImporter->import() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\maatwebsite\excel\src\Sheet.php:232
14. Maatwebsite\Excel\Sheet->import() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\maatwebsite\excel\src\Jobs\ReadChunk.php:105
15. Maatwebsite\Excel\Jobs\ReadChunk->Maatwebsite\Excel\Jobs\{closure}() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\laravel\framework\src\Illuminate\Database\Concerns\ManagesTransactions.php:29
16. Illuminate\Database\Connection->transaction() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\laravel\framework\src\Illuminate\Database\DatabaseManager.php:327
17. Illuminate\Database\DatabaseManager->__call() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\laravel\framework\src\Illuminate\Support\Facades\Facade.php:237
18. Illuminate\Support\Facades\Facade->__callStatic() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\maatwebsite\excel\src\Jobs\ReadChunk.php:109
19. Maatwebsite\Excel\Jobs\ReadChunk->handle() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\laravel\framework\src\Illuminate\Container\BoundMethod.php:29
20. call_user_func_array() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\laravel\framework\src\Illuminate\Container\BoundMethod.php:29
21. Illuminate\Container\BoundMethod->Illuminate\Container\{closure}() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\laravel\framework\src\Illuminate\Container\BoundMethod.php:87
22. Illuminate\Container\BoundMethod->callBoundMethod() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\laravel\framework\src\Illuminate\Container\BoundMethod.php:31
23. Illuminate\Container\BoundMethod->call() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\laravel\framework\src\Illuminate\Container\Container.php:572
24. Illuminate\Container\Container->call() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\laravel\framework\src\Illuminate\Bus\Dispatcher.php:94
25. Illuminate\Bus\Dispatcher->Illuminate\Bus\{closure}() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php:128
26. Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php:104
27. Illuminate\Pipeline\Pipeline->then() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\laravel\framework\src\Illuminate\Bus\Dispatcher.php:98
28. Illuminate\Bus\Dispatcher->dispatchNow() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\maatwebsite\excel\src\ChunkReader.php:58
29. Maatwebsite\Excel\ChunkReader->Maatwebsite\Excel\{closure}() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\laravel\framework\src\Illuminate\Support\Collection.php:419
30. Illuminate\Support\Collection->each() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\maatwebsite\excel\src\ChunkReader.php:59
31. Maatwebsite\Excel\ChunkReader->read() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\maatwebsite\excel\src\Reader.php:85
32. Maatwebsite\Excel\Reader->read() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\maatwebsite\excel\src\Excel.php:122
33. Maatwebsite\Excel\Excel->import() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\maatwebsite\excel\src\Concerns\Importable.php:37
34. App\Imports\My\Bauk\Attendance\AttendanceByFingersImport->import() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\app\Http\Controllers\My\Bauk\AttendanceController.php:150
35. App\Http\Controllers\My\Bauk\AttendanceController->upload() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\laravel\framework\src\Illuminate\Routing\Controller.php:54
36. call_user_func_array() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\laravel\framework\src\Illuminate\Routing\Controller.php:54
37. Illuminate\Routing\Controller->callAction() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\laravel\framework\src\Illuminate\Routing\ControllerDispatcher.php:45
38. Illuminate\Routing\ControllerDispatcher->dispatch() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\laravel\framework\src\Illuminate\Routing\Route.php:219
39. Illuminate\Routing\Route->runController() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\laravel\framework\src\Illuminate\Routing\Route.php:176
40. Illuminate\Routing\Route->run() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\laravel\framework\src\Illuminate\Routing\Router.php:682
41. Illuminate\Routing\Router->Illuminate\Routing\{closure}() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php:30
42. Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\app\Http\Middleware\Service\CheckPermission.php:22
43. App\Http\Middleware\Service\CheckPermission->handle() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php:163
44. Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php:53
45. Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\app\Http\Middleware\Service\CheckPermissionContext.php:23
46. App\Http\Middleware\Service\CheckPermissionContext->handle() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php:163
47. Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php:53
48. Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\app\Http\Middleware\Service\RequireClientTimezone.php:19
49. App\Http\Middleware\Service\RequireClientTimezone->handle() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php:163
50. Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php:53
51. Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\app\Http\Middleware\Service\Auth.php:23
52. App\Http\Middleware\Service\Auth->handle() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php:163
53. Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php:53
54. Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\laravel\framework\src\Illuminate\Routing\Middleware\SubstituteBindings.php:41
55. Illuminate\Routing\Middleware\SubstituteBindings->handle() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php:163
56. Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php:53
57. Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\VerifyCsrfToken.php:75
58. Illuminate\Foundation\Http\Middleware\VerifyCsrfToken->handle() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php:163
59. Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php:53
60. Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\laravel\framework\src\Illuminate\View\Middleware\ShareErrorsFromSession.php:49
61. Illuminate\View\Middleware\ShareErrorsFromSession->handle() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php:163
62. Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php:53
63. Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\laravel\framework\src\Illuminate\Session\Middleware\StartSession.php:63
64. Illuminate\Session\Middleware\StartSession->handle() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php:163
65. Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php:53
66. Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\laravel\framework\src\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse.php:37
67. Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse->handle() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php:163
68. Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php:53
69. Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\laravel\framework\src\Illuminate\Cookie\Middleware\EncryptCookies.php:66
70. Illuminate\Cookie\Middleware\EncryptCookies->handle() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php:163
71. Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php:53
72. Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php:104
73. Illuminate\Pipeline\Pipeline->then() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\laravel\framework\src\Illuminate\Routing\Router.php:684
74. Illuminate\Routing\Router->runRouteWithinStack() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\laravel\framework\src\Illuminate\Routing\Router.php:659
75. Illuminate\Routing\Router->runRoute() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\laravel\framework\src\Illuminate\Routing\Router.php:625
76. Illuminate\Routing\Router->dispatchToRoute() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\laravel\framework\src\Illuminate\Routing\Router.php:614
77. Illuminate\Routing\Router->dispatch() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\laravel\framework\src\Illuminate\Foundation\Http\Kernel.php:176
78. Illuminate\Foundation\Http\Kernel->Illuminate\Foundation\Http\{closure}() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php:30
79. Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\app\Http\Middleware\MinifyReponseOutputString.php:11
80. App\Http\Middleware\MinifyReponseOutputString->handle() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php:163
81. Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php:53
82. Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\fideloper\proxy\src\TrustProxies.php:57
83. Fideloper\Proxy\TrustProxies->handle() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php:163
84. Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php:53
85. Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\TransformsRequest.php:31
86. Illuminate\Foundation\Http\Middleware\TransformsRequest->handle() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php:163
87. Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php:53
88. Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\TransformsRequest.php:31
89. Illuminate\Foundation\Http\Middleware\TransformsRequest->handle() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php:163
90. Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php:53
91. Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\ValidatePostSize.php:27
92. Illuminate\Foundation\Http\Middleware\ValidatePostSize->handle() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php:163
93. Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php:53
94. Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode.php:62
95. Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode->handle() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php:163
96. Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php:53
97. Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php:104
98. Illuminate\Pipeline\Pipeline->then() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\laravel\framework\src\Illuminate\Foundation\Http\Kernel.php:151
99. Illuminate\Foundation\Http\Kernel->sendRequestThroughRouter() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\system\vendor\laravel\framework\src\Illuminate\Foundation\Http\Kernel.php:116
100. Illuminate\Foundation\Http\Kernel->handle() D:\CLOUD DRIVE & REPOSITORIES\Git Repositories\jiwa-nala.org\my.jiwa-nala.org\index.php:71
is it posible have closure base rule validation for import?
How to write it properly?
Thanks
@freezyoff hey, closure validation is currently not supported. Feel free submit a PR to add it.
Sorry, i try to PR but permission denied.
below my fix.
i do test on some possible scenarios in my project, but no phpunit test yet.
hope this help. thx
public function validate(array $rows, WithValidation $import)
{
$rules = $this->rules($import);
$messages = $this->messages($import);
$attributes = $this->attributes($import);
try {
$this->validator->make($rows, $rules, $messages, $attributes)->validate();
} catch (IlluminateValidationException $e) {
$failures = [];
foreach ($e->errors() as $attribute => $messages) {
$row = strtok($attribute, '.');
$attributeName = strtok('');
$attributeName = $attributes['*.' . $attributeName] ?? $attributeName;
$failures[] = new Failure(
$row,
$attributeName,
str_replace($attribute, $attributeName, $messages),
$rows[$row] //<----- failure line celss
);
}
if ($import instanceof SkipsOnFailure) {
$import->onFailure(...$failures);
throw new RowSkippedException(...$failures);
}
throw new ValidationException(
$e,
$failures
);
}
}
private function formatRule($rules)
{
if (is_array($rules)) {
foreach ($rules as $rule) {
$formatted[] = $this->formatRule($rule);
}
return $formatted ?? [];
}
//<---- closure condition check
// check if given $rules is closure.
// if closure, do nothing. Let Illuminate\Contracts\Validation\Factory handle the rest;
if (is_object($rules) && is_callable($rules)) return $rules;
if (Str::contains($rules, 'required_if') && preg_match('/(.*):(.*),(.*)/', $rules, $matches)) {
$column = Str::startsWith($matches[2], '*.') ? $matches[2] : '*.' . $matches[2];
return $matches[1] . ':' . $column . ',' . $matches[3];
}
return $rules;
}
namespace Maatwebsite\Excel\Validators;
use Illuminate\Contracts\Support\Arrayable;
class Failure implements Arrayable
{
/**
* @var int
*/
protected $row;
/**
* @var string
*/
protected $attribute;
/**
* @var array
*/
protected $errors;
/**
* @var array
*/
protected $cells;
/**
* @param int $row
* @param string $attribute
* @param array $errors
*/
public function __construct(int $row, string $attribute, array $errors, array $cells)
{
$this->row = $row;
$this->attribute = $attribute;
$this->errors = $errors;
$this->cells = $cells;
}
/**
* @return int
*/
public function row(): int
{
return $this->row;
}
/**
* @return string
*/
public function attribute(): string
{
return $this->attribute;
}
/**
* @return array
*/
public function errors(): array
{
return $this->errors;
}
/**
* @return array
*/
public function toArray()
{
return collect($this->errors)->map(function ($message) {
return __('There was an error on row :row. :message', ['row' => $this->row, 'message' => $message]);
})->all();
}
public function cells(): array{
return $this->cells;
}
}
Will be added in next release
Wow.. great!!!
Btw, i add cells() function to Failure class.
I'm curious, how to get columns value when failure occurs (without modify it)?
@freezyoff $failure->values()
Most helpful comment
Will be added in next release