123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144 |
- <?php namespace System\Validation;
- use System\Str;
- use System\Lang;
- class Message {
- /**
- * Get the appropriate validation message for a rule attribute.
- *
- * @param Rule $rule
- * @param string $attribute
- * @return string
- */
- public static function get($rule, $attribute)
- {
- if ($rule instanceof Rangable_Rule)
- {
- $message = static::get_rangable_message($rule);
- }
- elseif ($rule instanceof Rules\Upload_of)
- {
- $message = static::get_upload_of_message($rule);
- }
- else
- {
- $message = static::get_message($rule);
- }
- return static::prepare($rule, $attribute, $message);
- }
- /**
- * Get the error message for a typical validation rule.
- *
- * @param Rule $rule
- * @return string
- */
- private static function get_message($rule)
- {
- // ---------------------------------------------------------
- // The built-in error messages are stored in the language
- // directory and are keyed by the class name of the rule
- // they are associated with.
- // ---------------------------------------------------------
- if (is_null($rule->error))
- {
- $class = explode('\\', get_class($rule));
- $rule->error = strtolower(end($class));
- }
- return (is_null($rule->message)) ? Lang::line('validation.'.$rule->error)->get() : $rule->message;
- }
- /**
- * Get the error message for a Rangable rule.
- *
- * @param Rule $rule
- * @return string
- */
- private static function get_rangable_message($rule)
- {
- // ---------------------------------------------------------
- // Rangable rules sometimes set a "presence_of" error.
- //
- // This occurs when an attribute is null and the option to
- // allow null values has not been set.
- // ---------------------------------------------------------
- if ($rule->error == 'presence_of')
- {
- return static::get_message($rule);
- }
- // ---------------------------------------------------------
- // Slice "number_" or "string_" off of the error type.
- // ---------------------------------------------------------
- $error_type = substr($rule->error, 7);
- return (is_null($rule->$error_type)) ? Lang::line('validation.'.$rule->error)->get() : $rule->$error_type;
- }
- /**
- * Get the error message for an Upload_Of rule.
- *
- * @param Rule $rule
- * @return string
- */
- private static function get_upload_of_message($rule)
- {
- // ---------------------------------------------------------
- // Slice "file_" off of the error type.
- // ---------------------------------------------------------
- $error_type = substr($rule->error, 5);
- return (is_null($rule->$error_type)) ? Lang::line('validation.'.$rule->error)->get() : $rule->$error_type;
- }
- /**
- * Prepare an error message for display. All place-holders will be replaced
- * with their actual values.
- *
- * @param Rule $rule
- * @param string $attribute
- * @param string $message
- * @return string
- */
- private static function prepare($rule, $attribute, $message)
- {
- // ---------------------------------------------------------
- // The rangable rule messages have three place-holders that
- // must be replaced.
- //
- // :max = The maximum size of the attribute.
- // :min = The minimum size of the attribute.
- // :size = The exact size the attribute must be.
- // ---------------------------------------------------------
- if ($rule instanceof Rangable_Rule)
- {
- $message = str_replace(':max', $rule->maximum, $message);
- $message = str_replace(':min', $rule->minimum, $message);
- $message = str_replace(':size', $rule->size, $message);
- }
- // ---------------------------------------------------------
- // The Upload_Of rule message have two place-holders taht
- // must be replaced.
- //
- // :max = The maximum file size of the upload (kilobytes).
- // :types = The allowed file types for the upload.
- // ---------------------------------------------------------
- elseif ($rule instanceof Rules\Upload_Of)
- {
- $message = str_replace(':max', $rule->maximum, $message);
- if (is_array($rule->types))
- {
- $message = str_replace(':types', implode(', ', $rule->types), $message);
- }
- }
- return str_replace(':attribute', Lang::line('attributes.'.$attribute)->get(str_replace('_', ' ', $attribute)), $message);
- }
- }
|