Я новичок в Laravel, и я пытаюсь создать приложение, которое в какой-то момент имеет форму, в которой у меня есть поле массива, чтобы позволить конечному пользователю введите столько информации, сколько ему нравится.Laravel 5.1: Пользовательский валидатор с пользовательскими сообщениями об ошибках
Моей полевая форма таково:
<div class="rule">
<div class="target">
<select name="rule[0][0][target]" id="target_NSBYS" class="form-control">
<option value="url">URL</option>
<option value="referrer">Referrer</option>
</select>
</div>
<div class="condition">
<select name="rule[0][0][condition]" id="condition_NSBYS" class="form-control">
<option value="equals">Equals</option>
<option value="contains">Contains</option>
<option value="starts_with">Starts With</option>
<option value="ends_with">Ends With</option>
<option value="regex">Matches RegExp</option>
<option value="not_equal">Doesn't Equal</option>
<option value="not_contains">Does not contain</option>
<option value="not_starts_with">Does not start with</option>
<option value="not_ends_with">Does not end with</option>
<option value="not_regex">Does not match RegExp</option>
</select>
</div>
<div class="rule">
<input type="text" id="rule_NSBYS" name="rule[0][0][rule]" placeholder="Rule value" value="" class="form-control">
</div>
<div class="actions">
<a href="javascript:void(0)" class="removeRule btn btn-sm btn-default">-</a>
<a href="javascript:void(0)" class="addRule btn btn-sm btn-default">+</a>
</div>
</div>
Таким образом, в задней части у меня зарегистрировать новый поставщик услуг, для того, чтобы зарегистрировать все мои пользовательские правила проверки внутри этого класса.
Поставщик услуг выглядит следующим образом:
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Validator;
class CustomValidationRules extends ServiceProvider
{
public function boot()
{
Validator::extend(
'campaign_rules',
function ($attribute, $value, $parameters) {
$valid = true;
foreach ($value as $group_id => $group_fields) {
foreach ($group_fields as $field_id => $field_set) {
$result = Validator::make(
$field_set,
array(
'target' => 'required|in:url,referrer',
'condition' => 'required|in:equals,contains,starts_with,ends_with,regex,not_equal,not_contains,not_starts_with,not_ends_with,not_regex',
'rule' => 'required'
),
array(
'target.required' => sprintf(
'The target field in the %d rules group, in the %d rule it is required',
$group_id,
$field_id
),
'target.in' => sprintf(
'The target field in the %d rules group, in the %d rule contains a wrong value',
$group_id,
$field_id
),
'condition.required' => sprintf(
'The conditional field in the %d rules group, in the %d rule it is required',
$group_id,
$field_id
),
'condition.in' => sprintf(
'The conditional field in the %d rules group, in the %d rule contains a wrong value',
$group_id,
$field_id
),
'rule.required' => sprintf(
'The rule field in the %d rules group, in the %d rule can\'t be empty',
$group_id,
$field_id
)
)
);
if ($result->fails()) {
$valid = false;
break 1;
break 2;
}
}
}
return $valid;
}
);
}
}
Также у меня есть пользовательский класс запрос, чтобы проверить мои данные формы и содержит следующий код:
<?php
namespace App\Http\Requests;
use App\Eb\Helpers;
use App\Http\Requests\Request;
class CampaignValidation extends Request
{
public function authorize()
{
if (Helpers::is_super_admin() || Helpers::is_client()) {
return true;
}
return false;
}
public function rules()
{
return [
'name' => 'required|max:255',
'status' => 'required|in:active,paused,archived',
'publication_date' => 'required|date_format:Y-m-d H:i',
'expiration_date' => 'required|date_format:Y-m-d H:i',
'mode' => 'required|in:normal,aggressive',
'rule' => 'campaign_rules'
];
}
}
Итак, используя этот код, я могу подтвердите нормальный мой код, но, к сожалению, сообщение об ошибке, которое я получаю после процесса проверки, выглядит следующим образом:
Errors occurred
validation.campaign_rules
и это не приятно. Как вы уже видели, у поставщика услуг, когда я использую Validator :: make, я использую третий параметр, чтобы возвращать правильные сообщения об ошибках.
Итак, вопрос в том, как я могу отправить это сообщение об ошибке в начале моего приложения?
Почему 'rule.rule.required'? Должно ли это не быть 'rule.campaign_rules'? В 5.1 я думаю, что сообщения задаются в файлах языков. – Jeemusu
Это был просто истец, и я забыл его удалить. Я пытаюсь много думать и никто не работал :(Любая идея о том, как решить эту проблему? –
Я только что исправил :) –