CakePHP中的base_url

时间:2010-11-28 19:22:58

标签: php cakephp

在大多数Web应用程序中,我们需要全局var base_url。在cakephp中获取base_url目前我将以下代码放在app_controller.php中的beforeRender方法

function beforeRender(){
    $this->set('base_url', 'http://'.$_SERVER['SERVER_NAME'].Router::url('/'));
}

还有其他选择吗?意味着是否有任何全局变量可用于获取基本URL而不是这个?

7 个答案:

答案 0 :(得分:68)

是的,有。在您看来,您可以访问:

<?php echo $this->webroot; ?>

此外,您的主机信息存储在$_SERVER['HTTP_HOST']变量中,以备不时之需。

在您的控制器中,如果您需要完整的网址,请使用以下网址:

Router::url('/', true);

答案 1 :(得分:27)

使用下面的任何选项

  1. <?php echo $this->Html->url('/');?>

  2. <?php Router::url('/', true); ?>

  3. <?php echo $this->base;?>

  4. <?php echo $this->webroot; ?>

  5. 将Config / core.php中的常量定义为define("BASE_URL", "www.yoursite.com/");,并在项目的任何位置使用BASE_URL

  6. 并创建一个包含以下功能的公共帮助器

    <?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常量。