代码之家  ›  专栏  ›  技术社区  ›  Mads Mobæk

在Zend框架中从视图获取basepath

  •  11
  • Mads Mobæk  · 技术社区  · 16 年前

    案例:您正在使用Zend框架开发一个站点,需要指向部署webapp的文件夹的相关链接。即。 mysite.com/folder 在线和 localhost:8080 正在开发中。

    无论部署位置如何,以下功能在控制器中都很好地工作:

    $this->_helper->redirector->gotoSimple($action, $controller, $module, $params);
    

    以及在viewsscript中的以下内容,即index.phtml:

    <a href="<?php echo $this->url(array('controller'=>'index', 'action' => 'index'), null, true); ?>">
    

    但是,当链接到图像或样式表时,如何获得正确的基路径?(例如,在layout.phtml文件中):

    <img src='<?php echo WHAT_TO_TYPE_HERE; ?>images/logo.png' />
    

    $this->headLink()->appendStylesheet( WHAT_TO_TYPE_HERE . 'css/default.css');
    

    WHAT_TO_TYPE_HERE 应该换成

    <img src="/folder/images/logo.png />` on mysite.com and `<img src="/images/logo.png />
    

    本地主机

    6 回复  |  直到 12 年前
        1
  •  16
  •   Akeem    16 年前

    您可以从前端控制器获取基本URL Zend_Controller_Front::getInstance()->getBaseUrl(); . 我在视图帮助器中包装它

    class My_View_Helper_BaseUrl 
    {   
        /**
         *  Get base url
         * 
         * @return string
         */
        public function baseUrl()
        {
            return rtrim(Zend_Controller_Front::getInstance()->getBaseUrl(),'/');
        }
    
    }
    

    所以在HTML标记中 <img src="<?php echo $this->baseUrl();?>/images/logo.png"/> 在帮助程序中去掉尾随斜杠,这样当应用程序不在子文件夹中运行时(在这种情况下,baseurl为空),路径仍然可以工作。

        2
  •  14
  •   puppybits    13 年前

    如果有人想知道最好的方法,不想浪费2个小时搜索zend/google。有一个视图帮助器可以做到这一点。

    $this->view->serverUrl();
    
        3
  •  5
  •   J.K.A.    12 年前

    如果要在您的 layout 把这个打印出来 HOST 姓名:

    echo $this->serverUrl().$this->baseUrl()
    
        4
  •  4
  •   Markus Hedlund    12 年前

    这是我的 巴苏 帮手:

    class Zend_View_Helper_BaseUrl extends Zend_View_Helper_Abstract {
        public function baseUrl() {
            $protocol = isset($_SERVER['HTTPS']) ? 'https' : 'http';
            $server = $_SERVER['HTTP_HOST'];
            $port = $_SERVER['SERVER_PORT'] != 80 ? ":{$_SERVER['SERVER_PORT']}" : '';
            $path = rtrim(dirname($_SERVER['SCRIPT_NAME']), '/\\') . '/';
            return "$protocol://$server$port$path";
        }
    }
    
        5
  •  0
  •   RoboTamer    15 年前
    <?php
    /**
     *
     * @package   TaMeR Library
     * @copyright (C) 2010 Dennis T Kaplan
     * @license   GPL {@link http://www.gnu.org/licenses/gpl.html}
     *
     * @author       Dennis T Kaplan
     */
    
    /** @see Zend_View_Helper_Abstract */
    require_once 'Zend/View/Helper/Abstract.php';
    
    class TaMeR_View_Helper_BaseUrl extends Zend_View_Helper_Abstract {
        /**
         * Returns site's base url, or file with base url prepended
         *
         * $file is appended to the base url for simplicity
         *
         * @param  string|null $file
         * @return string
         */
    
        public function baseUrl($file = NULL) {
    
            $baseUrl = $domain = $subdomain = $protocol = $host = $port = NULL;
    
            $host = array_reverse(explode('.', $_SERVER['HTTP_HOST']));
            $domain = $host[1].'.'.$host[0];
            $subdomain = (isset($host[2]) ? $host[2] : 'www');
            if(getenv("HTTPS") == 'on') {
                $protocol = 'https';
                $port     = $_SERVER['SERVER_PORT'] != 443 ? ':'.$_SERVER['SERVER_PORT'] : '';
            }else{
                $protocol = 'http';
                $port     = $_SERVER['SERVER_PORT'] != 80 ? ':'.$_SERVER['SERVER_PORT'] : '';
            }
    
            // Remove trailing slashes
            if(NULL !== $file) {
                $file = '/' . ltrim($file, '/\\');
            }else{
                $file = rtrim(dirname($_SERVER['SCRIPT_NAME']), '/') . '/';
            }
            $baseUrl = $protocol.'://'.$subdomain.'.'.$domain.$port.$file;
            return $baseUrl;
        }
    }
    
        6
  •  0
  •   Strategist    12 年前

    这对我很有用:

    echo$this->服务器URL()。$-& gt;URL()

    推荐文章