|
| Re: link_to backend (urgent, help!) [message #31105 is a reply to message #31104 ] |
Mon, 09 July 2007 17:06   |
|
Here's an helper that allows links between apps:
/**
* a function that allows link_to between apps
* @param $app string the app we want to go to
* @param $route string the route in the app. Must be valid
* @param $args array the arguments required by the route. Optional
*
*/
function cross_app_link_to($app, $route, $args=null)
{
/* get the host to build the absolute paths
needed because this menu lets switch between sf apps
*/
$host = sfContext::getInstance()->getRequest()->getHost() ;
/* get the current environment. Needed to switch between the apps preserving
the environment
*/
$env = sfConfig::get('sf_environment');
/* get the routing file
*/
$appRoutingFile = SF_ROOT_DIR.DIRECTORY_SEPARATOR.'apps'.DIRECTORY_SEPARATOR.$app.DIRECTORY_SEPARATOR.'config'.DIRECTORY_SEPARATOR.'routing.yml' ;
/* get the route in the routing file */
/* first, substract the @ from the route name */
$route = substr($route, 1, strlen($route)) ;
if (file_exists($appRoutingFile))
{
$yml = sfYaml::load($appRoutingFile) ;
$routeUrl = $yml[$route]['url'] ;
if ($args)
{
foreach ($args as $k => $v)
{
$routeUrl = str_replace(':'.$k, $v, $routeUrl) ;
}
}
if (strrpos($routeUrl, '*') == strlen($routeUrl)-1)
{
$routeUrl = substr($routeUrl, 0, strlen($routeUrl)-2) ;
}
}
if ($env == 'dev')
{
$path = 'http://' . $host . '/' . $app . '_dev.php' . $routeUrl ;
}
else
{
$path = 'http://' . $host . $routeUrl ;
}
return $path ;
}
It's not very clean, but it works !
<edit>
Use :
<?php use_helper('Name_of_helper_where_you_put_the_code_above') ; ?>
<?php echo link_to('Label', cross_app_link_to('backend', 'homepage')) ; ?>
</edit>
[Updated on: Mon, 09 July 2007 17:08] all about me
t-shirts
|
|
|
|
|