ORM Validation exceptions.
Class declared in MODPATH/orm/classes/orm/validation/exception.php on line 10.
string
$error_viewlink to thiserror rendering view
string(12) "kohana/error"
string
$error_view_content_typelink to thiserror view content type
string(9) "text/html"
array
$php_errorslink to thisPHP error code => human readable name
array(8) ( 1 => string(11) "Fatal Error" 256 => string(10) "User Error" 4 => string(11) "Parse Error" 2 => string(7) "Warning" 512 => string(12) "User Warning" 2048 => string(6) "Strict" 8 => string(6) "Notice" 4096 => string(17) "Recoverable Error" )
string
$_aliaslink to thisThe alias of the main ORM model this exception was created for
array
$_objectslink to thisArray of validation objects
$codelink to this
$filelink to this
$linelink to this
$messagelink to thisConstructs a new exception for the specified model
string
$alias
required - The alias to use when looking for error messagesValidation
$object
required - The Validation object of the modelstring
$message
= string(24) "Failed to validate array" - The error messagearray
$values
= NULL - The array of values for the error messageinteger
$code
= integer 0 - The error code for the exceptionvoid
public
function
__construct(
$alias
, Validation
$object
,
$message
=
'Failed to validate array'
,
array
$values
= NULL,
$code
= 0)
{
$this
->_alias =
$alias
;
$this
->_objects[
'_object'
] =
$object
;
$this
->_objects[
'_has_many'
] = FALSE;
parent::__construct(
$message
,
$values
,
$code
);
}
Adds a Validation object to this exception
// The following will add a validation object for a profile model
// inside the exception for a user model.
$e
->add_object(
'profile'
,
$validation
);
// The errors array will now look something like this
// array
// (
// 'username' => 'This field is required',
// 'profile' => array
// (
// 'first_name' => 'This field is required',
// ),
// );
string
$alias
required - The relationship alias from the modelValidation
$object
required - The Validation object to mergemixed
$has_many
= bool FALSE - The array key to use if this exception can be merged multiple timesORM_Validation_Exception
public
function
add_object(
$alias
, Validation
$object
,
$has_many
= FALSE)
{
// We will need this when generating errors
$this
->_objects[
$alias
][
'_has_many'
] = (
$has_many
!== FALSE);
if
(
$has_many
=== TRUE)
{
// This is most likely a has_many relationship
$this
->_objects[
$alias
][][
'_object'
] =
$object
;
}
elseif
(
$has_many
)
{
// This is most likely a has_many relationship
$this
->_objects[
$alias
][
$has_many
][
'_object'
] =
$object
;
}
else
{
$this
->_objects[
$alias
][
'_object'
] =
$object
;
}
return
$this
;
}
Returns the protected _alias property from this exception
string
public
function
alias()
{
return
$this
->_alias;
}
Returns a merged array of the errors from all the Validation objects in this exception
// Will load Model_User errors from messages/orm-validation/user.php
$e
->errors(
'orm-validation'
);
string
$directory
= NULL - Directory to load error messages frommixed
$translate
= bool TRUE - Translate the messagearray
public
function
errors(
$directory
= NULL,
$translate
= TRUE)
{
return
$this
->generate_errors(
$this
->_alias,
$this
->_objects,
$directory
,
$translate
);
}
Merges an ORM_Validation_Exception object into the current exception Useful when you want to combine errors into one array
ORM_Validation_Exception
$object
required - The exception to mergemixed
$has_many
= bool FALSE - The array key to use if this exception can be merged multiple timesORM_Validation_Exception
public
function
merge(ORM_Validation_Exception
$object
,
$has_many
= FALSE)
{
$alias
=
$object
->alias();
// We will need this when generating errors
$this
->_objects[
$alias
][
'_has_many'
] = (
$has_many
!== FALSE);
if
(
$has_many
=== TRUE)
{
// This is most likely a has_many relationship
$this
->_objects[
$alias
][] =
$object
->objects();
}
elseif
(
$has_many
)
{
// This is most likely a has_many relationship
$this
->_objects[
$alias
][
$has_many
] =
$object
->objects();
}
else
{
$this
->_objects[
$alias
] =
$object
->objects();
}
return
$this
;
}
Returns the protected _objects property from this exception
array
public
function
objects()
{
return
$this
->_objects;
}
Magic object-to-string method.
echo
$exception
;
string
public
function
__toString()
{
return
Kohana_Exception::text(
$this
);
}
Inline exception handler, displays the error message, source of the exception, and the stack trace of the error.
Exception
$e
required - $eboolean
public
static
function
handler(Exception
$e
)
{
try
{
// Get the exception information
$type
= get_class(
$e
);
$code
=
$e
->getCode();
$message
=
$e
->getMessage();
$file
=
$e
->getFile();
$line
=
$e
->getLine();
// Get the exception backtrace
$trace
=
$e
->getTrace();
if
(
$e
instanceof
ErrorException)
{
if
(isset(Kohana_Exception::
$php_errors
[
$code
]))
{
// Use the human-readable error name
$code
= Kohana_Exception::
$php_errors
[
$code
];
}
if
(version_compare(PHP_VERSION,
'5.3'
,
'<'
))
{
// Workaround for a bug in ErrorException::getTrace() that
// exists in all PHP 5.2 versions.
// @link http://bugs.php.net/45895
for
(
$i
=
count
(
$trace
) - 1;
$i
> 0; --
$i
)
{
if
(isset(
$trace
[
$i
- 1][
'args'
]))
{
// Re-position the args
$trace
[
$i
][
'args'
] =
$trace
[
$i
- 1][
'args'
];
// Remove the args
unset(
$trace
[
$i
- 1][
'args'
]);
}
}
}
}
// Create a text version of the exception
$error
= Kohana_Exception::text(
$e
);
if
(
is_object
(Kohana::
$log
))
{
// Add this exception to the log
Kohana::
$log
->add(Log::ERROR,
$error
);
$strace
= Kohana_Exception::text(
$e
).
"\n--\n"
.
$e
->getTraceAsString();
Kohana::
$log
->add(Log::STRACE,
$strace
);
// Make sure the logs are written
Kohana::
$log
->write();
}
if
(Kohana::
$is_cli
)
{
// Just display the text of the exception
echo
"\n{$error}\n"
;
exit
(1);
}
if
( ! headers_sent())
{
// Make sure the proper http header is sent
$http_header_status
= (
$e
instanceof
HTTP_Exception) ?
$code
: 500;
header(
'Content-Type: '
.Kohana_Exception::
$error_view_content_type
.
'; charset='
.Kohana::
$charset
, TRUE,
$http_header_status
);
}
if
(Request::
$current
!== NULL AND Request::current()->is_ajax() === TRUE)
{
// Just display the text of the exception
echo
"\n{$error}\n"
;
exit
(1);
}
// Start an output buffer
ob_start();
// Include the exception HTML
if
(
$view_file
= Kohana::find_file(
'views'
, Kohana_Exception::
$error_view
))
{
include
$view_file
;
}
else
{
throw
new
Kohana_Exception(
'Error view file does not exist: views/:file'
,
array
(
':file'
=> Kohana_Exception::
$error_view
,
));
}
// Display the contents of the output buffer
echo
ob_get_clean();
exit
(1);
}
catch
(Exception
$e
)
{
// Clean the output buffer if one exists
ob_get_level()
and
ob_clean();
// Display the exception text
echo
Kohana_Exception::text(
$e
),
"\n"
;
// Exit with an error status
exit
(1);
}
}
Get a single line of text representing the exception:
Error [ Code ]: Message ~ File [ Line ]
Exception
$e
required - $estring
public
static
function
text(Exception
$e
)
{
return
sprintf(
'%s [ %s ]: %s ~ %s [ %d ]'
,
get_class(
$e
),
$e
->getCode(),
strip_tags
(
$e
->getMessage()), Debug::path(
$e
->getFile()),
$e
->getLine());
}
Recursive method to fetch all the errors in this exception
string
$alias
required - Alias to use for messages filearray
$array
required - Array of Validation objects to get errors fromstring
$directory
required - Directory to load error messages frommixed
$translate
required - Translate the messagearray
protected
function
generate_errors(
$alias
,
array
$array
,
$directory
,
$translate
)
{
$errors
=
array
();
foreach
(
$array
as
$key
=>
$object
)
{
if
(
is_array
(
$object
))
{
$errors
[
$key
] = (
$key
===
'_external'
)
// Search for errors in $alias/_external.php
?
$this
->generate_errors(
$alias
.
'/'
.
$key
,
$object
,
$directory
,
$translate
)
// Regular models get their own file not nested within $alias
:
$this
->generate_errors(
$key
,
$object
,
$directory
,
$translate
);
}
elseif
(
$object
instanceof
Validation)
{
if
(
$directory
=== NULL)
{
// Return the raw errors
$file
= NULL;
}
else
{
$file
= trim(
$directory
.
'/'
.
$alias
,
'/'
);
}
// Merge in this array of errors
$errors
+=
$object
->errors(
$file
,
$translate
);
}
}
return
$errors
;
}