Implementación de las interfaces PSR-7 UriInterface y PSR-17 UriFactoryInterface.
Nada especial. Simplemente trabajando. Porque necesito una implementación de URI que no esté conectada a la mensajería HTTP. Y algunos extras. Permitir todos los esquemas válidos.
Instalar con Composer;
composer require phrity/net-uri
Implementa PSR-7 UriInterface y proporciona algunos métodos y opciones adicionales. Más información aquí.
use Phrity Net Uri ;
$ uri = new Uri ( ' http://example.com/path/to/file.html?query1=1#fragment ' );
// PSR-7 getters
$ uri -> getScheme ();
$ uri -> getHost ();
$ uri -> getPort ();
$ uri -> getPath ();
$ uri -> getQuery ();
$ uri -> getFragment ();
$ uri -> getAuthority ();
$ uri -> getUserInfo ();
// PSR-7 setters
$ uri -> withScheme ( ' https ' );
$ uri -> withHost ( ' example2.com ' );
$ uri -> withPort ( 8080 );
$ uri -> withPath ( ' /path/to/another/file.html ' );
$ uri -> withQuery ( ' query2=2 ' );
$ uri -> withFragment ( ' another-fragment ' );
$ uri -> withUserInfo ( ' username ' , ' password ' );
// Additional methods
$ uri -> toString ();
$ uri -> __toString ();
$ uri -> jsonSerialize ();
$ uri -> getQueryItems ();
$ uri -> getQueryItem ( ' query1 ' );
$ uri -> withQueryItems ([ ' query1 ' => ' 1 ' , ' query2 ' => ' 2 ' ]);
$ uri -> withQueryItem ( ' query1 ' , ' 1 ' );
$ uri -> getComponents ();
$ uri -> withComponents ([ ' scheme ' => ' https ' , ' host ' => ' example2.com ' ]);
Implementa PSR-17 UriFactoryInterface y proporciona algunos métodos y opciones adicionales. Más información aquí.
use Phrity Net UriFactory ;
$ factory = new UriFactory ();
$ factory -> createUri ( ' http://example.com/path/to/file.html ' );
$ factory -> createUriFromInterface ( new GuzzleHttp Psr7 Uri ( ' http://example.com/path/to/file.html ' ));
Al sacarlo de la caja, se comportará según lo especificado por los estándares PSR. Para cambiar el comportamiento, hay algunos modificadores disponibles. Estos se pueden agregar como último argumento en todos los métodos get
y with
, además del método toString
.
REQUIRE_PORT
: intento de mostrar el puerto, incluso si es el predeterminadoABSOLUTE_PATH
: hará que la ruta utilice la forma absoluta, es decir, que comience con /
NORMALIZE_PATH
: intentará normalizar la rutaIDN_ENCODE
/ IDN_DECODE
: codifica o decodifica el formato IDN para hosts no ASCIIURI_DECODE
/ URI_ENCODE
/ URI_ENCODE_3986
- Codificar o decodificar componentes URI $ uri = new Uri ( ' http://example.com ' );
$ uri -> getPort (Uri:: REQUIRE_PORT ); // => 80
$ uri -> toString (Uri:: REQUIRE_PORT ); // => 'http://example.com:80'
$ uri = new Uri ( ' a/./path/../to//something ' );
$ uri -> getPath (Uri:: ABSOLUTE_PATH | Uri:: NORMALIZE_PATH ); // => '/a/to/something'
$ uri -> toString (Uri:: ABSOLUTE_PATH | Uri:: NORMALIZE_PATH ); // => '/a/to/something'
$ clone = $ uri -> withPath ( ' path/./somewhere/else/.. ' , Uri:: ABSOLUTE_PATH | Uri:: NORMALIZE_PATH );
$ clone -> getPath (); // => '/path/somewhere'
$ uri = new Uri ( ' https://ηßöø必Дあ.com ' );
$ uri -> getHost (Uri:: IDN_ENCODE ); // => 'xn--zca0cg32z7rau82strvd.com'
Versión | PHP | |
---|---|---|
2.1 | ^8.0 | Opciones de codificación/decodificación de URI |
2.0 | ^8.0 | Ayudantes de consulta, con métodos ([]) y getComponents(), codificación/decodificación de IDN |
1.3 | ^7.4|^8.0 | |
1.2 | ^7.4|^8.0 | modificador IDNA |
1.1 | ^7.4|^8.0 | Requerir puerto, Ruta absoluta, Normalizar modificadores de ruta |
1.0 | ^7.4|^8.0 | Versión inicial |