【问题标题】:base_url in CakePHPCakePHP 中的 base_url
【发布时间】:2019-05-31 02:17:00
【问题描述】:

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

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

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

【问题讨论】:

    标签: php cakephp


    【解决方案1】:

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

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

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

    在您的控制器中,如果您想要完整的 URL,请使用:

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

    【讨论】:

    • 因为第 2 版和第 3 版完全不同,询问 cakephp 问题的人 + 回答的人没有提及版本。我应该提到这在 3.x 版本上对我有用。
    【解决方案2】:

    使用下方的任何人选项

    1. &lt;?php echo $this-&gt;Html-&gt;url('/');?&gt;

    2. &lt;?php Router::url('/', true); ?&gt;

    3. &lt;?php echo $this-&gt;base;?&gt;

    4. &lt;?php echo $this-&gt;webroot; ?&gt;

    5. 将 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,因为它们提供了完整的 url。

    【讨论】:

      【解决方案3】:

      你可以使用

      <?php echo Router::fullbaseUrl();?>
      

      也是。

      更多详情请参考http://book.cakephp.org/2.0/en/core-libraries/global-constants-and-functions.html

      【讨论】:

        【解决方案4】:

        在应用中的任何位置使用Router::url('/', true)
        具体在View中,可以使用$this-&gt;Html-&gt;url('/', true)(或者其他任何Helper,其实Helper::url方法被所有Helper继承),它只是对上述Router方法的一个包装。

        在任何一种情况下,second true parameter 都会使其返回完整的 URL。

        【讨论】:

          【解决方案5】:

          你可以使用 Router::fullBaseUrl()

          如果你有 example.com/test 并且你想忽略 /test,你可以使用 'full' => false。 此外,如果您想强制使用 ssl,您可以添加 '_ssl' => true。

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

          确保您将 null 作为第一个参数传递,因为这是您想要传递的基本 url。

          注意: 您需要导入路由器,以便您可以使用上述功能:

          use Cake\Routing\Router
          

          【讨论】:

            【解决方案6】:

            对于大多数用途,我建议使用 CakePHP HtmlHelper 来生成 URL,这样您就不必担心基本 URL。但是,在您的视图中获取基本 URL 的最用户友好的方式是 &lt;?php echo $html-&gt;webroot; ?&gt;

            【讨论】:

              【解决方案7】:

              您可以使用FULL_BASE_URL 常量。

              【讨论】:

              • 这应该是一条评论。
              猜你喜欢
              • 2016-12-02
              • 2018-11-08
              • 2011-07-04
              • 2018-07-26
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2015-07-09
              • 2014-06-01
              相关资源
              最近更新 更多