Hi,
I have tried many approaches in order to be able to keep my
development frontend files in a separate directory than the
production frontends. This has the advantage that you can more easily
prevent/secure access to the development frontend while still being
able to keep the development frontends in svn without the danger of
forgetting to remove these files when doing a checkout on the
production machines. More importantly by making this separate
directory with the development frontends available form the web, but
with additional security precautions, its possible to use the
development frontends on your production machines. The process to get
there is unfortunately quite hacky. I am open for suggestions on how
to improve the approach as its described below:
In order to prevent end users from accessing development front
controllers or other administrative tools, these files should be
moved to a directory "admin" inside the root symfony directory. This
will however break any assets from loading properly. The solution is
to change the AssetHelper to use a different relative url in that
case. The following steps are necessary for this:
1) Add a constant in the given front controllers that enables the
host rewriting:
define('SF_REWRITE_ASSET_HOST', true);
2) Add a filter that rewrites the location (for most applications
there will be a need to initialize the session, making sure that non
authenticated users are directed at the right page, that the language/
country cookie is set properly etc., which seems like a goof location
for this code):
class initSessionFilter extends sfFilter
{
/**
* Execute filter
*
* @param FilterChain $filterChain The symfony filter chain
*/
public function execute($filterChain)
{
if ($this->isFirstCall()) {
$context = $this->getContext();
$request = $context->getRequest();
$user = $context->getUser();
$action = $context->getActionStack()->getLastEntry()-
>getActionInstance();
if (defined('SF_REWRITE_ASSET_HOST') && SF_REWRITE_ASSET_HOST) {
$asset_host = sfConfig::get('app_config_rewrite_asset_host');
if (substr($asset_host, 0, 4) === 'http') {
$request->setRelativeUrlRoot($asset_host);
} elseif (preg_match('/s(\/.+\/)(.*)/', $asset_host,
$matches)) {
$request->setRelativeUrlRoot(preg_replace($matches[1],
$matches[2], $request->getRelativeUrlRoot()));
} else {
$request->setRelativeUrlRoot($request->getRelativeUrlRoot
().$asset_host);
}
}
..
}
}
}
3) Add 'app_config_rewrite_asset_host' to your app.yml file
all:
config:
# rewrite_asset_host: 'http://foo.bar'
# rewrite_asset_host: 's/admin\./'
rewrite_asset_host: '/../web'
Remember that you can have different configuration settings per
environment and per server (following the above guidelines).
There is a problem with this solution however if the no_script_tag
feature is disabled, since in that case the url helpers will use the
$request->getRelativeUrlRoot() to construct the url. In that case you
also need to do some further hacking:
4) First you need to store the original relative url root in a
constant before modifying the value in your filter. Then you need to
open up and store lib/symfony/controller/sfWebController.class.php in
your application lib directory and modify the genUrl() method. Look
for the call to getRelativeUrlRoot() and change the section of the
code as follows:
$url = '';
if (!sfConfig::get('sf_no_script_name'))
{
$url = $this->getContext()->getRequest()->getScriptName();
}
else if ($sf_relative_url_root = $this->getContext()->getRequest()-
>getRelativeUrlRoot())
{
$url = (defined('RELATIVE_ROOT_URL')) ? RELATIVE_ROOT_URL :
$sf_relative_url_root;
}
regards,
Lukas
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"symfony developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/symfony-devs?hl=en
-~----------~----~----~----~------~----~------~--~---