Higgs proporciona una solución orientada a objetos para trabajar con URI en su aplicación. Usar esto lo hace simple para garantizar que la estructura sea siempre correcta, sin importar cuán complejo pueda ser el URI, además de agregar URI relativo a uno existente y resolverlo de forma segura y correcta.
Creando instancias de URI
Crear una instancia de URI es tan simple como crear una nueva instancia de clase.
Cuando crea la nueva instancia, puede pasar una URL completa o parcial en el constructor y se analizará. en sus secciones apropiadas:
$uri = new \Higgs\HTTP\URI('http://www.example.com/some/path');
Alternativamente, puede usar la función service()
para devolverle una instancia:
$uri = service('uri', 'http://www.example.com/some/path');
Desde v7.4.0, si no pasa una URL, devuelve la URI actual:
$uri = service('uri'); // returns the current SiteURI instance.
Nota
The above code returns the SiteURI
instance, that extends the URI
clase. La clase URI
es para URI generales, pero la clase SiteURI
es
para los URI de su sitio.
El URI actual
Muchas veces, todo lo que realmente desea es un objeto que represente la URL actual de esta solicitud.
Puede utilizar la función current_url()
disponible en Asistente de URL:
$uri = current_url(true);
Debe pasar true
como primer parámetro; de lo contrario, devolverá la representación de cadena de la URL actual.
Este URI se basa en la ruta (relativa a su baseURL
) según lo determinado por el objeto de solicitud actual y
su configuración en Config\App
(baseURL
, indexPage
y forceGlobalSecureRequests
).
Suponiendo que estás en un controlador que extiende Higgs\Controller
,
También puede obtener la instancia actual de SiteURI:
$uri = $this->request->getUri();
Cadenas URI
Muchas veces, todo lo que realmente desea es obtener una representación de cadena de un URI. Esto es fácil de hacer simplemente lanzando el URI como una cadena:
<?php
$uri = current_url(true);
echo (string) $uri; // http://example.com/index.php
Si conoce las partes del URI y solo quiere asegurarse de que todo esté formateado correctamente, puede generar una cadena
usando el método estático createURIString()
de la clase URI:
<?php
use Higgs\HTTP\URI;
$uriString = URI::createURIString($scheme, $authority, $path, $query, $fragment);
// Creates: http://exmample.com/some/path?foo=bar#first-heading
echo URI::createURIString('http', 'example.com', 'some/path', 'foo=bar', 'first-heading');
Importante
When URI
is cast to a string, it will attempt to adjust project URLs to the
configuración definida en Config\App
. Si necesita la representación de cadena exacta e inalterada
luego use URI::createURIString()
en su lugar.
Las partes de URI
Una vez que tenga una instancia de URI, puede configurar o recuperar cualquiera de las distintas partes del URI. Esta sección proporcionará detalles sobre cuáles son esas piezas y cómo trabajar con ellas.
Esquema
El esquema suele ser “http” o “https”, pero se admite cualquier esquema, incluido “archivo”, “mailto”, etc.
<?php
$uri = new \Higgs\HTTP\URI('http://www.example.com/some/path');
echo $uri->getScheme(); // 'http'
$uri->setScheme('https');
Autoridad
Muchos URI contienen varios elementos que se conocen colectivamente como «autoridad». Esto incluye cualquier información de usuario,
el host y el número de puerto. Puede recuperar todas estas piezas como una sola cadena con getAuthority()
método, o puede manipular las partes individuales.
<?php
$uri = new \Higgs\HTTP\URI('ftp://user:password@example.com:21/some/path');
echo $uri->getAuthority(); // user@example.com:21
De forma predeterminada, esto no mostrará la parte de la contraseña, ya que no querrás mostrársela a nadie. Si quieres
para mostrar la contraseña, puede utilizar el método showPassword()
. Esta instancia de URI seguirá mostrando esa contraseña
hasta que lo apagues nuevamente, así que asegúrate siempre de apagarlo tan pronto como hayas terminado:
<?php
echo $uri->getAuthority(); // user@example.com:21
echo $uri->showPassword()->getAuthority(); // user:password@example.com:21
// Turn password display off again.
$uri->showPassword(false);
Si no desea mostrar el puerto, pase true
como único parámetro:
<?php
echo $uri->getAuthority(true); // user@example.com
Nota
If the current port is the default port for the scheme it will never be displayed.
Información de usuario
La sección de información de usuario es simplemente el nombre de usuario y la contraseña que puede ver con un URI de FTP. Mientras puedas conseguir esto como parte de la Autoridad, también puedes recuperarlo tú mismo:
<?php
echo $uri->getUserInfo(); // user
De forma predeterminada, no mostrará la contraseña, pero puedes anularla con el método showPassword()
:
<?php
echo $uri->showPassword()->getUserInfo(); // user:password
$uri->showPassword(false);
Anfitrión
La parte del host del URI suele ser el nombre de dominio de la URL. Esto se puede configurar y recuperar fácilmente con el
Métodos getHost()
y setHost()
:
<?php
$uri = new \Higgs\HTTP\URI('http://www.example.com/some/path');
echo $uri->getHost(); // www.example.com
echo $uri->setHost('anotherexample.com')->getHost(); // anotherexample.com
Puerto
El puerto es un número entero entre 0 y 65535. Cada esquema tiene un valor predeterminado asociado.
<?php
$uri = new \Higgs\HTTP\URI('ftp://user:password@example.com:21/some/path');
echo $uri->getPort(); // 21
echo $uri->setPort(2201)->getPort(); // 2201
Cuando se utiliza el método setPort()
, se comprobará que el puerto esté dentro del rango válido y se asignará.
Camino
El camino son todos los segmentos dentro del propio sitio. Como era de esperar, los métodos getPath()
y setPath()
se puede utilizar para manipularlo:
<?php
$uri = new \Higgs\HTTP\URI('http://www.example.com/some/path');
echo $uri->getPath(); // '/some/path'
echo $uri->setPath('/another/path')->getPath(); // '/another/path'
Nota
When setting the path this way, or any other way the class allows, it is sanitized to encode any dangerous caracteres y elimine los segmentos de puntos por seguridad.
Nota
Since v7.4.0, the SiteURI::getRoutePath()
method,
devuelve la ruta URI relativa a baseURL y SiteURI::getPath()
El método siempre devuelve la ruta URI completa con /
inicial.
Consulta
Los datos de la consulta se pueden manipular a través de la clase utilizando representaciones de cadenas simples.
Obtener/configurar consulta
Los valores de consulta sólo pueden establecerse como una cadena actualmente.
<?php
$uri = new \Higgs\HTTP\URI('http://www.example.com?foo=bar');
echo $uri->getQuery(); // 'foo=bar'
$uri->setQuery('foo=bar&bar=baz');
El método setQuery()
sobrescribe cualquier variable de consulta existente.
Nota
Query values cannot contain fragments. An InvalidArgumentException will be thrown if it does.
Configuración de consulta desde matriz
Puede establecer valores de consulta utilizando una matriz:
<?php
$uri->setQueryArray(['foo' => 'bar', 'bar' => 'baz']);
El método setQueryArray()
sobrescribe cualquier variable de consulta existente.
Agregar valor de consulta
Puedes agregar un valor al
colección de variables de consulta sin destruir las variables de consulta existentes con el método addQuery()
. La primera
El parámetro es el nombre de la variable y el segundo parámetro es el valor:
<?php
$uri->addQuery('foo', 'bar');
Filtrar valores de consulta
Puede filtrar los valores de consulta devueltos pasando una matriz de opciones al método getQuery()
, ya sea con un
sólo o una clave excepto:
<?php
$uri = new \Higgs\HTTP\URI('http://www.example.com?foo=bar&bar=baz&baz=foz');
// Returns 'foo=bar'
echo $uri->getQuery(['only' => ['foo']]);
// Returns 'foo=bar&baz=foz'
echo $uri->getQuery(['except' => ['bar']]);
Esto solo cambia los valores devueltos durante esta llamada. Si necesita modificar los valores de consulta del URI de forma más permanente,
Cambiar valores de consulta
puedes usar los métodos stripQuery()
y keepQuery()
para cambiar la colección de variables de consulta del objeto real:
<?php
$uri = new \Higgs\HTTP\URI('http://www.example.com?foo=bar&bar=baz&baz=foz');
// Leaves just the 'baz' variable
$uri->stripQuery('foo', 'bar');
// Leaves just the 'foo' variable
$uri->keepQuery('foo');
Nota
By default setQuery()
and setQueryArray()
methods uses native parse_str()
function to prepare data.
Si desea utilizar reglas más liberales (que permiten que los nombres de las claves contengan puntos), puede utilizar un método especial
useRawQueryString()
de antemano.
Fragmento
Los fragmentos son la parte al final de la URL, precedida por el signo de almohadilla (#
). En las URL HTML estos son enlaces.
a un ancla en la página. Los URI de medios pueden utilizarlos de otras maneras.
<?php
$uri = new \Higgs\HTTP\URI('http://www.example.com/some/path#first-heading');
echo $uri->getFragment(); // 'first-heading'
echo $uri->setFragment('second-heading')->getFragment(); // 'second-heading'
Segmentos URI
Cada sección del camino entre las barras es un único segmento.
Nota
In the case of your site URI, URI Segments mean only the URI path part relativo a la URL base. Si su baseURL contiene subcarpetas, los valores será diferente de la ruta URI actual.
La clase URI proporciona una forma sencilla de determinar cuáles son los valores de los segmentos. Los segmentos comienzan en 1 siendo el extremo izquierdo del camino.
<?php
// URI = http://example.com/users/15/profile
// Prints '15'
if ($uri->getSegment(1) === 'users') {
echo $uri->getSegment(2);
}
También puede establecer un valor predeterminado diferente para un segmento en particular utilizando el segundo parámetro del método getSegment()
. El valor predeterminado es una cadena vacía.
<?php
// URI = http://example.com/users/15/profile
// will print 'profile'
echo $uri->getSegment(3, 'foo');
// will print 'bar'
echo $uri->getSegment(4, 'bar');
// will throw an exception
echo $uri->getSegment(5, 'baz');
// will print 'baz'
echo $uri->setSilent()->getSegment(5, 'baz');
// will print '' (empty string)
echo $uri->setSilent()->getSegment(5);
Nota
You can get the last +1 segment. When you try to get the last +2 or
más segmento, se generará una excepción de forma predeterminada. tu podrías prevenir
lanzando excepciones con el método setSilent()
.
Puede obtener un recuento del total de segmentos:
<?php
$total = $uri->getTotalSegments(); // 3
Finalmente, puedes recuperar una matriz de todos los segmentos:
<?php
$segments = $uri->getSegments();
/*
* Produces:
* [
* 0 => 'users',
* 1 => '15',
* 2 => 'profile',
* ]
*/
Deshabilitar el lanzamiento de excepciones
De forma predeterminada, algunos métodos de esta clase pueden generar una excepción. Si desea desactivarlo, puede establecer una bandera especial eso evitará que se produzcan excepciones.
<?php
// Disable throwing exceptions
$uri->setSilent();
// Enable throwing exceptions (default)
$uri->setSilent(false);