summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorctrlaltca <>2013-01-16 08:57:12 +0000
committerctrlaltca <>2013-01-16 08:57:12 +0000
commit97395e66b2d930a21ea18498889ddd72e6d77ef2 (patch)
treeb1032feaa7b2901db8742fd641bc349e2979fdf0
parent33c1798a05c95d98d36842ab0a26b32f642788f5 (diff)
Added a new UrlFormat for TUrlManager: HiddenPath; works like the 'Path' format, but hides the entryscript.php name
-rw-r--r--HISTORY1
-rw-r--r--demos/quickstart/protected/pages/GettingStarted/NewFeatures.page1
-rw-r--r--framework/Web/THttpRequest.php2
-rw-r--r--framework/Web/TUrlManager.php30
4 files changed, 29 insertions, 5 deletions
diff --git a/HISTORY b/HISTORY
index 8c99149e..debc56bd 100644
--- a/HISTORY
+++ b/HISTORY
@@ -20,6 +20,7 @@ BUG: Issue #431 - TReCaptcha does not work well with active controls (Gabor)
BUG: Issue #432 - Double slash with URL Tags in www root (ctrlaltca)
EHN: Permit to change the default cipher in TSecurityManager::setEncryption(); changed the default cipher from 3DES to AES256 (ctrlaltca)
+EHN: Added a new UrlFormat for TUrlManager: HiddenPath; works like the 'Path' format, but hides the entryscript.php name (ctrlaltca)
EHN: Use php's hash_hmac() when available in TSecurityManager, and permit the use of all algorithms supported by php (ctrlaltca)
EHN: Use mbstring when available in TSecurityManager to better handle multibyte text (ctrlaltca)
EHN: Updated TinyMCE to 3.5.6 (ctrlaltca)
diff --git a/demos/quickstart/protected/pages/GettingStarted/NewFeatures.page b/demos/quickstart/protected/pages/GettingStarted/NewFeatures.page
index fe171946..98adc925 100644
--- a/demos/quickstart/protected/pages/GettingStarted/NewFeatures.page
+++ b/demos/quickstart/protected/pages/GettingStarted/NewFeatures.page
@@ -9,6 +9,7 @@ This page summarizes the main new features that are introduced in each PRADO rel
<h2 id="8001">Version 3.2.1</h2>
<ul>
<li>TSecurityManager has been enhanced to support all the ciphers available in php</a></li>
+<li>Added a new UrlFormat for TUrlManager: HiddenPath; works like the 'Path' format, but hides the entryscript.php name</a></li>
<li>Updated external packages</a></li>
</ul>
diff --git a/framework/Web/THttpRequest.php b/framework/Web/THttpRequest.php
index 13a8be56..8e58d304 100644
--- a/framework/Web/THttpRequest.php
+++ b/framework/Web/THttpRequest.php
@@ -1320,6 +1320,7 @@ class TUri extends TComponent
* The following enumerable values are defined:
* - Get: the URL format is like /path/to/index.php?name1=value1&name2=value2...
* - Path: the URL format is like /path/to/index.php/name1,value1/name2,value2...
+ * - HiddenPath: the URL format is like /path/to/name1,value1/name2,value2...
*
* @author Qiang Xue <qiang.xue@gmail.com>
* @version $Id$
@@ -1330,5 +1331,6 @@ class THttpRequestUrlFormat extends TEnumerable
{
const Get='Get';
const Path='Path';
+ const HiddenPath='HiddenPath';
}
diff --git a/framework/Web/TUrlManager.php b/framework/Web/TUrlManager.php
index 0e6c78e3..75abdcf1 100644
--- a/framework/Web/TUrlManager.php
+++ b/framework/Web/TUrlManager.php
@@ -44,6 +44,18 @@ class TUrlManager extends TModule
* If {@link THttpRequest::setUrlFormat THttpRequest.UrlFormat} is 'Path',
* the following format is used instead:
* /entryscript.php/serviceID/serviceParameter/get1,value1/get2,value2...
+ * If {@link THttpRequest::setUrlFormat THttpRequest.UrlFormat} is 'HiddenPath',
+ * then entryscript.php will be hidden and the following format is used instead:
+ * /serviceID/serviceParameter/get1,value1/get2,value2...
+ * In order to use the 'HiddenPath' format you need proper url rewrite configuration;
+ * here's an example for Apache's .htaccess:
+ * <cdde>
+ * Options +FollowSymLinks
+ * RewriteEngine On
+ * RewriteCond %{REQUEST_FILENAME} !-d
+ * RewriteCond %{REQUEST_FILENAME} !-f
+ * RewriteRule ^(.*)$ index.php/$1 [L]
+ * </code>
* @param string service ID
* @param string service parameter
* @param array GET parameters, null if not provided
@@ -87,10 +99,16 @@ class TUrlManager extends TModule
}
}
}
- if($request->getUrlFormat()===THttpRequestUrlFormat::Path)
- return $request->getApplicationUrl().'/'.strtr($url,array($amp=>'/','?'=>'/','='=>$request->getUrlParamSeparator()));
- else
- return $request->getApplicationUrl().'?'.$url;
+
+ switch($request->getUrlFormat())
+ {
+ case THttpRequestUrlFormat::Path:
+ return $request->getApplicationUrl().'/'.strtr($url,array($amp=>'/','?'=>'/','='=>$request->getUrlParamSeparator()));
+ case THttpRequestUrlFormat::HiddenPath:
+ return rtrim(dirname($request->getApplicationUrl()), '/').'/'.strtr($url,array($amp=>'/','?'=>'/','='=>$request->getUrlParamSeparator()));
+ default:
+ return $request->getApplicationUrl().'?'.$url;
+ }
}
/**
@@ -110,7 +128,9 @@ class TUrlManager extends TModule
{
$request=$this->getRequest();
$pathInfo=trim($request->getPathInfo(),'/');
- if($request->getUrlFormat()===THttpRequestUrlFormat::Path && $pathInfo!=='')
+ if(($request->getUrlFormat()===THttpRequestUrlFormat::Path ||
+ $request->getUrlFormat()===THttpRequestUrlFormat::HiddenPath) &&
+ $pathInfo!=='')
{
$separator=$request->getUrlParamSeparator();
$paths=explode('/',$pathInfo);