Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 14.01.2013 02:37:59

Нормальные имена при валидации. Как?

Дошел я до валидации форм, и тут меня ждал неприятный сюрприз.
Есть поле у которого label = 'Заголовок'
а name для него title.
Так вот когда я валидирую и поле не заполнено например оно мне выдает ошибку.
"Поле title обязательно для заполнения."
А мне этот title нафиг не нужен в сообщении об ошибке, я хочу чтоб было написано то что я хочу. В этом случае "заголовок". В CodeIgniter задавался параметр name, потом писал по русски то что хочу 'заголовок' например, а потом правила валидации. Тут я такого как-то не заметил. Так как мне задавать нормальные человеческие имена?

Не в сети

#2 14.01.2013 02:49:04

Re: Нормальные имена при валидации. Как?

@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 );

Не в сети

#3 14.01.2013 02:56:41

Re: Нормальные имена при валидации. Как?

Ну и еще вопрос по валидации, есть ли тут возможность вызывать функции которые возвращают не только true|false а которые бы обрабатывали поля как-ниудь. Например. Поле ввода адреса сайта. Оно проверяет есть ли там http:// и если нет то добавляет. А потом я использую что нибудь типа.
$url=$validation->get_value('url');
И у меня там уже измененое значение. Ну или чтоб оно сами $inputs редактировало.

P.S. Когда уже призы будут самым активным участникам форума)??

Изменено la2ha (14.01.2013 02:57:39)

Не в сети

#4 14.01.2013 10:29:20

Re: Нормальные имена при валидации. Как?

Ну и еще вопрос по валидации, есть ли тут возможность вызывать функции которые возвращают не только true|false а которые бы обрабатывали поля как-ниудь. Например. Поле ввода адреса сайта. Оно проверяет есть ли там http:// и если нет то добавляет. А потом я использую что нибудь типа.
$url=$validation->get_value(’url’);
И у меня там уже измененое значение. Ну или чтоб оно сами $inputs редактировало.

P.S. Когда уже призы будут самым активным участникам форума)??

Я думаю это не DRY заставлять валицацию изменять входные данные.
Этим должна заниматься модель.
А так никто не запрещал расширять Validator.
В собственных функциях валидации 4 параметром передается this, что дает доступ к свойству $attributes текущего экземпляра Validator. Там и можно менять данные. Потом обращаться к ним через PHP$validator->attributes['attr_name'];

Не в сети

#5 14.01.2013 13:40:20

Re: Нормальные имена при валидации. Как?

  1. P.S. Когда уже призы будут самым активным участникам форума)??

А какого рода призы ты ждёшь? Модерировать тут нечего, всё тихо-мирно, статьи может писать каждый, если есть желание. А общественное признание не выдаётся ☺

  1. Я думаю это не DRY заставлять валицацию изменять входные данные.

Совершенно верно, и я думаю ты не добьёшься этого стандартной функциональностью. Если нужен такой гибридный подход — сделай свой класс «Normalizer» или «Sanitizer».

Касательно сообщений об ошибке ты можешь генерировать любые сообщения в методе своего правила. Вот, например, кусок правила для проверки загруженной картинки:

PHP
  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$mintrue$width$height);
      
$max and $this->checkImageSize($attribute$maxfalse$width$height);
      return 
true;
    }
  }

При вызове ->error() второй параметр — имя языковой строки (в примере выше это просто upload). Если оно с точкой, то работает обычная для Laravel концепция массива, то есть image.unrecognized соотносится с:

PHP
'image' => array('unrecognized' => ':attribute не является изображением.')

Посмотри исходники Validator, легко понять как он что делает.

Не в сети

#6 14.01.2013 18:14:11

Re: Нормальные имена при валидации. Как?

Спасибо. Гляну. И про модель действительно хорошая идея, что-то я не подумал. Призы - это я так. Увидел на каком-то форуме в качестве приза при наборе определенного количества чего-то регистрацию в Яндекс Каталоге. И еще кучу разных штук. Ну и ляпнул)

Не в сети

#7 14.01.2013 19:40:04

Re: Нормальные имена при валидации. Как?

  1. Увидел на каком-то форуме в качестве приза при наборе определенного количества чего-то регистрацию в Яндекс Каталоге.

Ну, дойдём и мы до поощрения своих пользователей, а пока растём. Если кому-то надо место, чтоб инфу по Laravel или PHP размещать (блог, рассылка или ещё что) — обращайтесь.

Не в сети

#8 21.01.2013 15:10:32

Re: Нормальные имена при валидации. Как?

Нашел баг по идее,

PHP
 '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)

Не в сети

#9 21.01.2013 15:36:18

Re: Нормальные имена при валидации. Как?

  1. и придется регистрировать собственные правила валидации для каждого случая и прописывать ошибки для них

Да, в текущей реализации Laravel иначе никак.

  1. что то не работает разметка о которой тут написано

Ты забыл поставить галочку под формой отправки.

Не в сети

Подвал раздела