【问题标题】:Could i add layout configuration in application.ini during run time in Zend framework我可以在 Zend 框架运行时在 application.ini 中添加布局配置吗
【发布时间】:2015-02-26 12:17:44
【问题描述】:

我们正在使用 Zend 框架。我们正在从管理面板或运行时创建模块,但它的布局不起作用,因为我们需要在 application.ini 中定义以下代码

pizzahut.resources.layout.layout = "layout"
pizzahut.resources.layout.layoutPath = APPLICATION_PATH "/modules/pizzahut/layouts/scripts/"

我们是否可以在运行时使用 PHP 编辑我们的 application.ini, 或者我们可以使用 PHP 在 application.ini 中添加新的布局配置吗?

【问题讨论】:

    标签: php zend-framework


    【解决方案1】:

    在谷歌搜索后,我发现我们可以用 PHP 编辑我们的application.ini

    代码如下:

    $config = parse_ini_file(
        APPLICATION_PATH . "/configs/application.ini", 
        TRUE, 
        INI_SCANNER_RAW
    );
    
    $config["production"]["$store.resources.layout.layout"] = "layout";
    
    $layoutPath = 'APPLICATION_PATH "/modules/' . $store . '/layouts/scripts/"';
    $config["production"]["$store.resources.layout.layoutPath"] = $layoutPath;
    
    $result = Helper_common::write_ini_file(
        $config,
        APPLICATION_PATH . "/configs/application.ini", 
        TRUE
    );
    

    这里parse_ini_file 用于从application.ini 文件中检索内容带有常量

    write_ini_file 是我调用来重写application.ini 文件的函数。

    这里是write_ini_file 函数:

    public static function write_ini_file($assoc_arr, $path, $has_sections=FALSE) { 
        $content = ""; 
        if ($has_sections) { 
            foreach ($assoc_arr as $key=>$elem) { 
                $content .= "[".$key."]\n"; 
                foreach ($elem as $key2=>$elem2) { 
                    if(is_array($elem2)) 
                    { 
                        for($i=0;$i<count($elem2);$i++) 
                        { 
                            $content .= $key2."[] = ".$elem2[$i]."\n"; 
                        } 
                    } 
                    else if($elem2=="") $content .= $key2." = \n"; 
                    else $content .= $key2." = ".$elem2."\n"; 
                } 
            } 
        } 
        else { 
            foreach ($assoc_arr as $key=>$elem) { 
                if(is_array($elem)) 
                { 
                    for($i=0;$i<count($elem);$i++) 
                    { 
                        $content .= $key2."[] = ".$elem[$i]."\n"; 
                    } 
                } 
                else if($elem=="") $content .= $key2." = \n"; 
                else $content .= $key2." = ".$elem."\n"; 
            } 
        } 
    
        if (!$handle = fopen($path, 'w')) { 
            return false; 
        } 
        if (!fwrite($handle, $content)) { 
            return false; 
        } 
        fclose($handle); 
        return true; 
    }
    

    【讨论】:

      【解决方案2】:

      ini 文件在应用程序开始运行时加载,在 bootstrap 之前,所以不可以。

      查看这些以了解如何在运行时动态更改布局:

      http://vandenbos.org/zend-framework-module-specific-layout/

      Change Layout in Bootstrap

      http://forums.zend.com/viewtopic.php?f=69&t=2466&start=0

      Setting up Zend Layout from Bootstrap

      setting layout file for module inside bootstrap in zend

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-14
        • 2010-11-07
        • 1970-01-01
        相关资源
        最近更新 更多