在大多数Web应用程序中,我们需要全局var base_url。在cakephp中获取base_url目前我将以下代码放在app_controller.php中的beforeRender方法
function beforeRender(){
$this->set('base_url', 'http://'.$_SERVER['SERVER_NAME'].Router::url('/'));
}
还有其他选择吗?意味着是否有任何全局变量可用于获取基本URL而不是这个?
答案 0 :(得分:68)
是的,有。在您看来,您可以访问:
<?php echo $this->webroot; ?>
此外,您的主机信息存储在$_SERVER['HTTP_HOST']
变量中,以备不时之需。
在您的控制器中,如果您需要完整的网址,请使用以下网址:
Router::url('/', true);
答案 1 :(得分:27)
使用下面的任何选项
<?php echo $this->Html->url('/');?>
<?php Router::url('/', true); ?>
<?php echo $this->base;?>
<?php echo $this->webroot; ?>
将Config / core.php中的常量定义为define("BASE_URL", "www.yoursite.com/");
,并在项目的任何位置使用BASE_URL
并创建一个包含以下功能的公共帮助器
<?php
class CommonHelper extends AppHelper {
function get_url($url){
return BASE_URL.$url;
}
function get_src($url){
echo BASE_URL.$url;
}
}
?>
并在项目的任何地方使用
$this->redirect($this->Common->get_url("login");
<a href="<?php $this->Common->get_src('users/login');?>">login</a>
不要忘记在控制器中包含Common helper
我推荐方法2和5,因为它们提供了完整的网址。
答案 2 :(得分:9)
在您的应用中的任何位置使用Router::url('/', true)
特别是在View中,您可以使用$this->Html->url('/', true)
(或任何其他Helper,事实上,Helper::url
方法由所有Helpers继承),这只是上述Router
方法的包装器。
在任何一种情况下,second true
parameter都会使其返回完整的网址。
答案 3 :(得分:9)
您可以使用
<?php echo Router::fullbaseUrl();?>
。
有关详细信息,请参阅http://book.cakephp.org/2.0/en/core-libraries/global-constants-and-functions.html。
答案 4 :(得分:1)
对于大多数用途,我建议使用CakePHP HtmlHelper生成URL,这样您就不必担心基本URL了。但是,在视图中获取基本网址的最用户友好方式是<?php echo $html->webroot; ?>
。
答案 5 :(得分:1)
你可以使用
Select Screen, count(*) AS Visits
From HitCounters
Where (userid = @userID or @userID is null) AND HitDate > DATEADD(day, -30, GETDATE())
Group By Screen
如果你有例如example.com/test并且你想忽略/测试,你可以使用&#39; full&#39; =&GT;假。 此外,如果你想强制ssl你可以添加&#39; _ssl&#39; =&GT;真。
即
Router::fullBaseUrl()
确保将null作为第一个参数传递,因为这是您想要传递它的基本URL。
请注意: 你需要导入路由器,所以你可以使用上面的功能:
Router::fullBaseUrl(null, [ '_ssl' => true, 'full' => false]
答案 6 :(得分:0)
您可以使用FULL_BASE_URL
常量。