Tabla de contenidos
Zend_Uri es un componente que ayuda a manipular y validar
identificadores uniformes de recursos (URIs).
Zend_Uri existe principalmente para dar servicio a otros componentes, como
Zend_Http_Client, pero también resulta útil como utilidad independiente.
Las URI siempre comienzan con un esquema, seguido de dos puntos. La
construcción de los distintos esquemas varía significativamente. La
clase Zend_Uri proporciona una fábrica que devuelve una subclase
de sí misma especializada en cada esquema. La subclase se denominará
Zend_Uri_<scheme>, donde
<scheme> es el esquema, en minúsculas con la primera letra
en mayúscula. Una excepción a esta regla es HTTPS, que también
es gestionado por Zend_Uri_Http.
Zend_Uri construirá una nueva URI desde cero
si solo se pasa un esquema a Zend_Uri::factory().
Ejemplo 75.1. Creación de una nueva URI con Zend_Uri::factory()
// To create a new URI from scratch, pass only the scheme.
$uri = Zend_Uri::factory('http');
// $uri instanceof Zend_Uri_Http
Para crear una nueva URI desde cero, pase únicamente el esquema a
Zend_Uri::factory()[30]. Si se pasa un esquema no compatible y no
se especifica una clase específica del esquema, se lanzará una Zend_Uri_Exception.
Si el esquema o la URI pasados son compatibles,
Zend_Uri::factory() devolverá una subclase de sí misma
especializada en el esquema que se va a crear.
A partir de Zend Framework 1.10.5, puede especificar una clase personalizada para
usarla al crear la instancia de Zend_Uri, como segundo parámetro del
método Zend_Uri::factory().
Esto le permite crear subclases de Zend_Uri y sus propias clases de URI personalizadas,
e instanciar nuevos objetos URI basados en sus propias clases personalizadas.
El segundo parámetro pasado a Zend_Uri::factory() debe
ser una cadena con el nombre de una clase que extienda Zend_Uri.
La clase debe estar ya cargada, o poder cargarse mediante Zend_Loader::loadClass();
es decir, debe seguir las convenciones de nomenclatura de clases y archivos de Zend Framework, y
debe estar en su include_path.
Ejemplo 75.2. Creación de una URI usando una clase personalizada
// Create a new 'ftp' URI based on a custom class
$ftpUri = Zend_Uri::factory(
'ftp://user@ftp.example.com/path/file',
'MyLibrary_Uri_Ftp'
);
// $ftpUri is an instance of MyLibrary_Uri_Ftp, which is a subclass of Zend_Uri
Para manipular una URI existente, pase la URI completa
a Zend_Uri::factory().
Ejemplo 75.3. Manipulación de una URI existente con Zend_Uri::factory()
// To manipulate an existing URI, pass it in.
$uri = Zend_Uri::factory('http://www.zend.com');
// $uri instanceof Zend_Uri_Http
La URI será analizada y validada. Si se determina que no es válida,
se lanzará inmediatamente una Zend_Uri_Exception. En caso contrario,
Zend_Uri::factory() devolverá una subclase de sí misma
especializada en el esquema que se va a manipular.
El método Zend_Uri::check() solo puede usarse si se necesita
validar una URI existente.
Ejemplo 75.4. Validación de la URI con Zend_Uri::check()
// Validate whether a given URI is well formed
$valid = Zend_Uri::check('http://uri.in.question');
// $valid is TRUE for a valid URI, or FALSE otherwise.
Zend_Uri::check() devuelve un booleano, lo cual resulta más conveniente
que usar Zend_Uri::factory() y capturar la excepción.
Por defecto, Zend_Uri no aceptará los siguientes
caracteres: "{", "}", "|", "\", "^", "`". Estos caracteres están
definidos por la RFC como "unwise" (poco recomendables) y no válidos; sin embargo, muchas
implementaciones sí aceptan estos caracteres como válidos.
Zend_Uri puede configurarse para aceptar estos caracteres "unwise" mediante
el establecimiento de la opción 'allow_unwise' al valor booleano TRUE usando
Zend_Uri::setConfig():
Ejemplo 75.5. Permitir caracteres especiales en las URIs
// Contains '|' symbol
// Normally, this would return false:
$valid = Zend_Uri::check('http://example.com/?q=this|that');
// However, you can allow "unwise" characters
Zend_Uri::setConfig(array('allow_unwise' => true));
// will return 'true'
$valid = Zend_Uri::check('http://example.com/?q=this|that');
// Reset the 'allow_unwise' value to the default FALSE
Zend_Uri::setConfig(array('allow_unwise' => false));
![]() |
Nota |
|---|---|
|
Cada instancia de una subclase de Zend_Uri (por ejemplo,
Zend_Uri_Http) dispone de varios métodos de instancia que resultan útiles para
trabajar con cualquier tipo de URI.
El esquema de la URI es la parte de la URI
que precede a los dos puntos. Por ejemplo, el esquema de
http://www.zend.com es 'http'.
Ejemplo 75.6. Obtener el esquema de un objeto Zend_Uri_*
$uri = Zend_Uri::factory('http://www.zend.com');
$scheme = $uri->getScheme(); // "http"
El método de instancia getScheme() devuelve únicamente la parte
del esquema del objeto URI.
Ejemplo 75.7. Obtener la URI completa de un objeto Zend_Uri_*
$uri = Zend_Uri::factory('http://www.zend.com');
echo $uri->getUri(); // "http://www.zend.com"
El método getUri() devuelve la representación en cadena
de la URI completa.
Zend_Uri::factory() siempre validará cualquier
URI que se le pase y no instanciará una nueva
subclase de Zend_Uri si se determina que la URI dada
no es válida. Sin embargo, una vez que se ha instanciado la subclase de Zend_Uri
para una nueva URI o una existente válida, es
posible que la URI posteriormente se vuelva no válida después de
ser manipulada.
Ejemplo 75.8. Validar un objeto Zend_Uri_*
$uri = Zend_Uri::factory('http://www.zend.com');
$isValid = $uri->valid(); // TRUE
El método de instancia valid() proporciona un medio para comprobar que
el objeto URI sigue siendo válido.
[30] En el momento de escribir esto,
Zend_Uri solo proporciona soporte integrado para los esquemas HTTP
y HTTPS.
![[Note]](images/note.png)