Shorten URLs with Zend Framework and bit.ly

This function uses version 3.0 of the bit.ly API. You’ll need to register for an account with them if you don’t already have one. Then you can retrieve your API key and begin using it immediately.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
function bitlyShorten($url)
{
	$client = new Zend_Http_Client('http://api.bit.ly/v3/shorten');
 
	$client->setParameterGet(array(
		'longUrl' => $url,
		'login' => 'xyz',
		'apiKey' => 'xyz'
	));
 
	$response = $client->request();
 
	if($response->isSuccessful())
	{
		$response = Zend_Json::decode($response->getBody());
 
		if($response['status_code'] == 200)
		{
			return $response['data']['url'];
		}
	}
 
	return (false);
}

Example:

1
2
$myLongUrl = 'http://www.jeremyglover.com/blog/';
$myShortUrl = bitlyShorten($myLongUrl);
Share

Force Zend Framework to use the index controller by default

Maze

Everyone wants pretty URLs these days—both for convenience and to optimize for search engines. So having URLs with unnecessary information is a major no-no. Over the past year I’ve been slowly absorbing the Zend Framework and its MVC pattern. Historically, projects I created required the user to specify the index controller like so:


http://www.mysite.com/index/page

…where “index” is the controller and “page” is the action. Since almost all people will be using the index controller, why is it in the URL? Want to get rid of it? Add the following to your application.ini file in the production section:


# Routes
resources.router.routes.default.route = /:action
resources.router.routes.default.defaults.controller = index
resources.router.routes.default.defaults.action = index

Now your application will use the index controller by default so your URLs will be even prettier:


http://www.mysite.com/page

But wait! What if you need to access a different controller? Maybe an admin controller (or module)? Add this beneath the previous addition:


resources.router.routes.admin.route = /admin/:action
resources.router.routes.admin.defaults.controller = admin
resources.router.routes.admin.defaults.action = index

The downside, of course, is that for each additional controller you create, you’ll need to add these three lines to your application.ini file. Luckily for me, I don’t anticipate having very many controllers.

While this technique may seem obvious, I couldn’t find it anywhere on Google. So, if you’re successfully doing this some other way, please share in the comments.

More on the Zend Framework Router

Share

Caching With Zend Framework Using Zend_Cache

Cheeks Blowing

Today I taught myself how to use Zend_Cache and implemented it within 20 minutes. It’s super easy and very effective. Take a look at the code sample below and you’ll be up and running in no time.

 

Step 1: Setup the Cache
{code type=php}
$frontendOptions = array(
‘lifetime’ => 180, // Cache for 3 minutes
‘automatic_serialization’ => true
);

$backendOptions = array(‘cache_dir’ => dirname(__FILE__) . ‘/cache/’);

$cache = Zend_Cache::factory(
‘Core’,
‘File’,
$frontendOptions,
$backendOptions);
{/code}

Step 2: Use the Cache
{code type=php}
$data = null;
if(!$data = $cache->load(‘data’))
{
$service = new Service(API_KEY);
$result = $service->generateReport();
$data = $service->getReport();
$cache->save($data, ‘data’);
}
else
{
print(“Cache Hit!”);
}
{/code}

The page load time went from about 9 seconds to 0.5 seconds! 18x faster and it only took a few lines of code. Awesome.

My main motivation for caching the data ($data in the code example) was actually to reduce the load on the web service which provides the data. We have a good relationship with the company providing the service but there’s a good chance they would become annoyed if we hammered their system to get the exact same data over and over. The load time improvement was a good side effect, though!

For more information on Zend_Cache which comes with the Zend Framework, check out the reference guide and API documentation.

Share