Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Дошел я до валидации форм, и тут меня ждал неприятный сюрприз.
Есть поле у которого label = 'Заголовок'
а name для него title.
Так вот когда я валидирую и поле не заполнено например оно мне выдает ошибку.
"Поле title обязательно для заполнения."
А мне этот title нафиг не нужен в сообщении об ошибке, я хочу чтоб было написано то что я хочу. В этом случае "заголовок". В CodeIgniter задавался параметр name, потом писал по русски то что хочу 'заголовок' например, а потом правила валидации. Тут я такого как-то не заметил. Так как мне задавать нормальные человеческие имена?
Не в сети
@la2ha Задать нормальные имена при валидации ты можешь в языковом файле validation.php того языка, который используешь.
Там снизу будет что то типа этого
/*
|--------------------------------------------------------------------------
| Validation Attributes
|--------------------------------------------------------------------------
|
| The following language lines are used to swap attribute place-holders
| with something more reader friendly such as "E-Mail Address" instead
| of "email". Your users will thank you.
|
| The Validator class will automatically search this array of lines it
| is attempting to replace the :attribute place-holder in messages.
| It's pretty slick. We think you'll like it.
|
*/
'attributes' => array(
'images'=>'"Картинки"',
'title'=>'"Заголовок"'
),
И вот в attributes пиши свои name и переводы для них.
Хоят конечно не очень сделано, было бы хорошо если бы можно было писать еще и так
$input = array(
'user_email' => $user_email,
'user_password' => $user_password
);
$rules = array(
'user_email' => 'required|email|exists:users',
'user_password' => 'required'
);
$friendly_names = array(
'user_email' => 'Email Address',
'user_password' => 'Password'
);
$validation = Validator::make( $input, $rules, null, $friendly_names );
Не в сети
Ну и еще вопрос по валидации, есть ли тут возможность вызывать функции которые возвращают не только true|false а которые бы обрабатывали поля как-ниудь. Например. Поле ввода адреса сайта. Оно проверяет есть ли там http:// и если нет то добавляет. А потом я использую что нибудь типа.
$url=$validation->get_value('url');
И у меня там уже измененое значение. Ну или чтоб оно сами $inputs редактировало.
P.S. Когда уже призы будут самым активным участникам форума)??
Изменено la2ha (14.01.2013 02:57:39)
Не в сети
Ну и еще вопрос по валидации, есть ли тут возможность вызывать функции которые возвращают не только true|false а которые бы обрабатывали поля как-ниудь. Например. Поле ввода адреса сайта. Оно проверяет есть ли там http:// и если нет то добавляет. А потом я использую что нибудь типа.
$url=$validation->get_value(’url’);
И у меня там уже измененое значение. Ну или чтоб оно сами $inputs редактировало.P.S. Когда уже призы будут самым активным участникам форума)??
Я думаю это не DRY заставлять валицацию изменять входные данные.
Этим должна заниматься модель.
А так никто не запрещал расширять Validator.
В собственных функциях валидации 4 параметром передается this, что дает доступ к свойству $attributes текущего экземпляра Validator. Там и можно менять данные. Потом обращаться к ним через PHP$validator->attributes['attr_name'];
Не в сети
- P.S. Когда уже призы будут самым активным участникам форума)??
А какого рода призы ты ждёшь? Модерировать тут нечего, всё тихо-мирно, статьи может писать каждый, если есть желание. А общественное признание не выдаётся
- Я думаю это не DRY заставлять валицацию изменять входные данные.
Совершенно верно, и я думаю ты не добьёшься этого стандартной функциональностью. Если нужен такой гибридный подход — сделай свой класс «Normalizer» или «Sanitizer».
Касательно сообщений об ошибке ты можешь генерировать любые сообщения в методе своего правила. Вот, например, кусок правила для проверки загруженной картинки:
protected function validate_image($attribute, $upload, $params = array()) {
if (!$this->validate_upload($attribute, $upload)) {
return $this->error($attribute, 'upload');
}
@list($width, $height) = getimagesize($upload['tmp_name']);
@list($min, $max) = $params;
if (!$width or !$height) {
return $this->error($attribute, 'image.unrecognized');
} else {
$min and $this->checkImageSize($attribute, $min, true, $width, $height);
$max and $this->checkImageSize($attribute, $max, false, $width, $height);
return true;
}
}
При вызове ->error() второй параметр — имя языковой строки (в примере выше это просто upload). Если оно с точкой, то работает обычная для Laravel концепция массива, то есть image.unrecognized соотносится с:
'image' => array('unrecognized' => ':attribute не является изображением.')
Посмотри исходники Validator, легко понять как он что делает.
Не в сети
Спасибо. Гляну. И про модель действительно хорошая идея, что-то я не подумал. Призы - это я так. Увидел на каком-то форуме в качестве приза при наборе определенного количества чего-то регистрацию в Яндекс Каталоге. И еще кучу разных штук. Ну и ляпнул)
Не в сети
Не в сети
'password' => 'required',
'confirm_password' => 'required|same:password',
для password есть перевод в языковом файле и он отображается если поле не запонено, а вот когда подтверждение пароля не такое-же как пароль выдает ошибку «Значение “Повторите пароль” должно совпадать с password.» у меня щас это единственная связка в форме, поэтому я могу задать Нормальное сообщение для ошибки переписав в $messages сообщение для same но в случае если у меня будет несколько таких, этот вариант уже не прокатит, и придется регистрировать собственные правила валидации для каждого случая и прописывать ошибки для них?
UPD: что то не работает разметка о которой тут написано [url]http://laravel.ru/forum/viewtopic.php?id=15[/url]
Изменено la2ha (21.01.2013 15:11:50)
Не в сети
Не в сети
Страницы 1