Get Current URL Attributes in Zend With The Request Object

 

A guide to accessing the current URI components in different parts of a Zend Framework application: the view, controller, and in your library. This tutorial makes use of the request object and the ServerUrl view helper.

 

The request object in Zend Framework makes it easy to access URI and environment information anywhere in the application. In this article you’ll find out how to do it in one of three places: the controller, view, and in your library files.

The Controller

Your controller will extend the Zend_Controller_Action  class. This class has the getRequest() method used to get the current request. Do a dump of the request object to get an idea of what it contains:

Dump Request Object

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Zend_Debug::dump($this->getRequest());
 
// Result
object(Zend_Controller_Request_Http)#21 (15) {
  ["_paramSources":protected] => array(2) {
    [0] => string(4) "_GET"
    [1] => string(5) "_POST"
  }
  ["_requestUri":protected] => string(10) "/mycontroller/myaction"
  ["_baseUrl":protected] => string(0) ""
  ["_basePath":protected] => NULL
  ["_pathInfo":protected] => string(10) "/mycontroller/myaction"
  ["_params":protected] => array(3) {
    ["controller"] => string(4) "mycontroller"
    ["action"] => string(4) "myaction"
    ["module"] => string(7) "default"
  }
  ["_rawBody":protected] => NULL
  ["_aliases":protected] => array(0) {
  }
  ["_dispatched":protected] => bool(true)
  ["_module":protected] => string(7) "default"
  ["_moduleKey":protected] => string(6) "module"
  ["_controller":protected] => string(4) "mycontroller"
  ["_controllerKey":protected] => string(10) "controller"
  ["_action":protected] => string(4) "myaction"
  ["_actionKey":protected] => string(6) "action"
}
Zend_Debug::dump($this->getRequest());

// Result
object(Zend_Controller_Request_Http)#21 (15) {
  ["_paramSources":protected] => array(2) {
    [0] => string(4) "_GET"
    [1] => string(5) "_POST"
  }
  ["_requestUri":protected] => string(10) "/mycontroller/myaction"
  ["_baseUrl":protected] => string(0) ""
  ["_basePath":protected] => NULL
  ["_pathInfo":protected] => string(10) "/mycontroller/myaction"
  ["_params":protected] => array(3) {
    ["controller"] => string(4) "mycontroller"
    ["action"] => string(4) "myaction"
    ["module"] => string(7) "default"
  }
  ["_rawBody":protected] => NULL
  ["_aliases":protected] => array(0) {
  }
  ["_dispatched":protected] => bool(true)
  ["_module":protected] => string(7) "default"
  ["_moduleKey":protected] => string(6) "module"
  ["_controller":protected] => string(4) "mycontroller"
  ["_controllerKey":protected] => string(10) "controller"
  ["_action":protected] => string(4) "myaction"
  ["_actionKey":protected] => string(6) "action"
}

Notice the object type is  Zend_Controller_Request_Http. From this object we are able to to access specific HTTP request information, including getting parameters:

getRequestUri()

1
2
3
4
5
6
$this->getRequest()->getRequestUri();
// URL
project.local/mycontroller/myaction?paramkey=paramvalue
 
// Result
/mycontroller/myaction?paramkey=paramval
$this->getRequest()->getRequestUri();
// URL
project.local/mycontroller/myaction?paramkey=paramvalue

// Result
/mycontroller/myaction?paramkey=paramval

getParams()

1
2
3
4
5
6
7
8
9
10
11
$this->getRequest()->getParams();
// URL
project.local/mycontroller/myaction?paramkey1=paramvalue1&paramkey2=paramvalue2
 
// Result
array(5) {
    ["controller"] => string(4) "test"
    ["action"] => string(4) "test"
    ["module"] => string(7) "default"
    ["paramkey1"] => string(11) "paramvalue1"
    ["paramkey2"] => string(11) "paramvalue2" }
$this->getRequest()->getParams();
// URL
project.local/mycontroller/myaction?paramkey1=paramvalue1&paramkey2=paramvalue2

// Result
array(5) {
    ["controller"] => string(4) "test"
    ["action"] => string(4) "test"
    ["module"] => string(7) "default"
    ["paramkey1"] => string(11) "paramvalue1"
    ["paramkey2"] => string(11) "paramvalue2" }

getScheme()

1
2
3
4
$this->getRequest()->getScheme();
 
// Result
'http' or 'https'
$this->getRequest()->getScheme();

// Result
'http' or 'https'

getHttpHost()

1
2
3
4
$this->getRequest()->getHttpHost();
 
// Result
'project.local'
$this->getRequest()->getHttpHost();

// Result
'project.local'

Even with all the above information we will have to piece together bits and pieces to build an absolute URL. We will need the scheme, HTTP host, and URI.

1
2
3
$request = $this->getRequest();
 
echo $request->getScheme() . '://' . $request->getHttpHost() . $request->getRequestUri();
$request = $this->getRequest();

echo $request->getScheme() . '://' . $request->getHttpHost() . $request->getRequestUri();

The Library

In library files you won’t have direct access to the request object. Luckily it’s just as easy to get the request object in the library because  Zend_Controller_Front implements a Singleton Pattern.

1
2
$request = Zend_Controller_Front::getInstance()->getRequest();
$url = $request->getScheme() . '://' . $request->getHttpHost() ;
$request = Zend_Controller_Front::getInstance()->getRequest();
$url = $request->getScheme() . '://' . $request->getHttpHost() ;

In this case we are getting an instance of the front controller that already exists, and then accessing the same methods we were as before. Simple!

The View

To follow MVC architecture, it is invalid to access the request object directly from a view. Instead developers have access to the ServerUrl view helper that is able to return the URL or URI.

1
2
3
4
5
// Returns URL. Example: http://project.local
echo $this->serverUrl();
 
// Returns URI. Example: http://project.local/mycontroller/myaction
echo $this->serverUrl(true);
// Returns URL. Example: http://project.local
echo $this->serverUrl();

// Returns URI. Example: http://project.local/mycontroller/myaction
echo $this->serverUrl(true);
 
 
 
 
Footnote

This website will always be ad-free. All I ask in return is that you please share this article if you found it helpful.

I also greatly enjoy comments, and will respond to every question in the comments section within a day or two. Don't hesitate to ask for help!

 
 
 
 
Comments
Craig says:
 

A good primer on the request object. Good job.

 
 

Leave a Reply