2010-02-02 6 views
7

Decir, por ejemplo, tengo un URI http://127.0.0.1/somecontroller/someaction#12345 que me lleva a la acción someAction() del controlador someController. A partir de ahí, puedo recuperar el objeto Request a través del $this->getRequest().PHP Zend Framework - ¿Cómo obtener Fragmento URI de solicitud desde objeto de solicitud?

también puedo recuperar información diversa sobre el URI del objeto Request.

Pero, ¿cómo puedo recuperar el fragmento (es decir, la parte "12345" después del # en, por ejemplo)? Ni getRequestUri() ni getParams() aparecen la parte del fragmento.

Gracias!

+0

Solo por curiosidad, ¿cuál era su caso de uso? – balupton

Respuesta

26

La parte del fragmento de la URL nunca se envía al servidor a través de solicitudes GET (o cualquier tipo de solicitud HTTP), la única forma de obtenerlo es escribiendo un fragmento de Javascript que analiza la URL y envía el fragmento al servidor a través de Ajax, por ejemplo.

Esto no se puede hacer con PHP solo.

+0

lo entiendo ahora, ¡gracias! –

3

Según la especificación del protocolo HTTP, se omite la parte del fragmento. Sin embargo, los navegadores admiten redireccionamientos con hash.

Si genera hashes de forma automática, es posible pasar el id como el parámetro de la petición: http://127.0.0.1/somecontroller/someaction/id/12345/#12345

y luego:

$this->getRequest()->getParam('id')

pero esto caliente manejar el caso con el hash solamente, p.ej cuando el usuario ingresa la URL manualmente

0

No se pudo usar la (s) función (es) php explode("#",$_SERVER['REQUEST_URI'])? Quizás he entendido mal la pregunta.

1

No se puede utilizar:

explode("#",$_SERVER['REQUEST_URI']) 

porque cuando se llama a $_SERVER['REQUEST_URI'], nunca se tiene la palabra después de #. Por ejemplo, su enlace www.example.com/about#test, y cuando llama al $_SERVER['REQUEST_URI'], acaba de obtener www.example.com/about.

+0

'explotar', según el propio manual de PHP: * Devuelve una matriz de cadenas, cada una de las cuales es una subcadena de cadena formada al dividirla en los límites formados por el delimitador de cadena. * –

Cuestiones relacionadas