2010-11-28 46 views
30

在大多數Web應用程序中,我們需要全局變量base_url。在CakePHP獲得BASE_URL目前我把下面的代碼放在beforeRender方法app_controller.phpCakePHP中的base_url

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

有什麼選擇?手段是否有任何全局變量可用於獲取基礎網址,而不是這個?

回答

64

是的,有。在您看來,您可以訪問:

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

此外,您的主機信息被存儲在情況下,你想要的$_SERVER['HTTP_HOST']變量。

在你的控制,如果你想完整URL,這樣使用:

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

使用Router::url('/', true)隨時隨地在你的應用程序。
具體來說,在視圖中,可以使用$this->Html->url('/', true)(或其他任何助手實際上,Helper::url方法由所有助手繼承),這只是上述Router方法的包裝。

無論哪種情況,second true parameter都會導致它返回完整的URL。

1

對於大多數目的,我建議使用CakePHP HtmlHelper來生成URL,這樣你就不需要擔心基本的URL。然而,在您的視圖中獲取基本URL的用戶最友好的方式是<?php echo $html->webroot; ?>

26

使用任何選項下面

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

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

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

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

  5. 定義在配置/ 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> 

不要忘記在控制器中包含常用幫手

我推薦方法2和5,因爲它們提供了完整的url。

0

您可以使用 Router::fullBaseUrl()

如果你有例如example.com/test和要忽略/測試,你可以使用「全」 =>假的。 另外,如果你想強制ssl,你可以添加'_ssl'=> true。

Router::fullBaseUrl(null, [ '_ssl' => true, 'full' => false] 

確保你傳遞null作爲,因爲這第一個參數是如果你想通過它的基本URL。

注: 需要導入路由器,所以你可以使用上面的函數:

use Cake\Routing\Router