如何通过关联数组

时间:2016-02-16 08:48:08

标签: php associative-array

我制作了一个php模板。我在index.php(主页)的代码中使用模板的方式是:

<?php
                                require 'scripts/back_end/views/country_select.php';
                                require 'scripts/back_end/views/view.php';
                                echo View::render('select_template.php');
                            ?>

现在这会导致此错误:

[17-Feb-2016 05:19:34 Europe/Berlin] PHP Notice:  Undefined variable: options in /Applications/MAMP/htdocs/its_vegan/scripts/back_end/views/select_template.php on line 3
[17-Feb-2016 05:19:34 Europe/Berlin] PHP Fatal error:  Cannot declare class CountrySelect, because the name is already in use in /Applications/MAMP/htdocs/its_vegan/scripts/back_end/views/country_select.php on line 3

我认为这是由index.php中的require - country_select.php以及select_template.php引起的。我认为在index.php中注释掉一个是解决方案。以下是我在评论最高html时得到的输出require(请参阅问题的底部以获得所需的html输出)

<select data-bind="options: 'options',
            optionsText: 'optionsText',
            optionsValue: 'optionsValue',
            value: value,
            optionsCaption: 'caption'"><option value="">caption</option><option value=""></option><option value=""></option><option value=""></option><option value=""></option><option value=""></option><option value=""></option><option value=""></option>
        </select>

评论最高require时的问题:

我试图访问此类中的options数组的值:

    <?php

class CountrySelect {

    static $template = 'select_template.php';

    public static function display() {

        if ( class_exists( 'View' ) ) {

            // Get the full path to the template file.
            $templatePath = dirname( __FILE__ ) . static::$template;

            $viewData = array(
                "options" => '_countries',
                "optionsText" => 'name',
                "optionsValue" => 'geonameId',
                "value" => 'selectedCountry',
                "caption" => 'Country'
            );

            // Return the rendered HTML
            return View::render( $templatePath, $viewData );

        }
        else {
            return "You are trying to render a template, but we can't find the View Class";
        }
    }
}

?>

我在PHP控制台中收到了这些错误。

  

[2016年2月17日05:15:48欧洲/柏林] PHP注意:未定义的变量:   选项   /Applications/MAMP/htdocs/its_vegan/scripts/back_end/views/select_template.php   第3行[17-Feb-2016 05:15:48欧洲/柏林] PHP通知:使用   未定义的常量选项 - 假设&#39;选项&#39;在   /Applications/MAMP/htdocs/its_vegan/scripts/back_end/views/select_template.php   第11行[17-Feb-2016 05:15:48欧洲/柏林] PHP注意:未定义   变量:选项   /Applications/MAMP/htdocs/its_vegan/scripts/back_end/views/select_template.php   第11行[17-Feb-2016 05:15:48欧洲/柏林] PHP通知:使用   undefined constant optionsText - 假设&#39; optionsText&#39;在   /Applications/MAMP/htdocs/its_vegan/scripts/back_end/views/select_template.php   第12行[17-Feb-2016 05:15:48欧洲/柏林] PHP注意:未定义   变量:选项   /Applications/MAMP/htdocs/its_vegan/scripts/back_end/views/select_template.php   第12行[17-Feb-2016 05:15:48欧洲/柏林] PHP公告:使用   undefined constant optionsValue - 假设&#39; optionsValue&#39;在   /Applications/MAMP/htdocs/its_vegan/scripts/back_end/views/select_template.php   第13行[17-Feb-2016 05:15:48欧洲/柏林] PHP注意:未定义   变量:选项   /Applications/MAMP/htdocs/its_vegan/scripts/back_end/views/select_template.php   第13行[17-Feb-2016 05:15:48欧洲/柏林] PHP通知:使用   未定义的常数值 - 假定的值&#39;在   /Applications/MAMP/htdocs/its_vegan/scripts/back_end/views/select_template.php   第14行[17-Feb-2016 05:15:48欧洲/柏林] PHP注意:未定义   变量:选项   /Applications/MAMP/htdocs/its_vegan/scripts/back_end/views/select_template.php   第14行[17-Feb-2016 05:15:48欧洲/柏林] PHP通知:使用   未定义的常量标题 - 假定的标题&#39;在   /Applications/MAMP/htdocs/its_vegan/scripts/back_end/views/select_template.php   第15行[17-Feb-2016 05:15:48欧洲/柏林] PHP注意:未定义   变量:选项   /Applications/MAMP/htdocs/its_vegan/scripts/back_end/views/select_template.php   在第15行

访问数组的模板:

    <?php

print_r($options);

include 'country_select.php';

?>
<div class="form-group col-sm-6">
    <div class="select">
        <span class="arr"></span>
        <select data-bind="options: '<? echo $options.options ?>',
            optionsText: '<? echo $options.optionsText ?>',
            optionsValue: '<? echo $options.optionsValue ?>',
            value: <? echo $options.value ?>,
            optionsCaption: '<? echo $options.caption ?>'">
        </select>
    </div>
</div>

按键访问关联数组值的正确方法是什么?

这里是具有渲染功能的view.php文件:

    <?php

/** View.php **/

class View {

    /**
     * -------------------------------------
     * Render a Template.
     * -------------------------------------
     * 
     * @param $filePath - include path to the template.
     * @param null $viewData - any data to be used within the template.
     * @return string - 
     * 
     */
    public static function render( $filePath, $viewData = null ) {

        // Was any data sent through?
        ( $viewData ) ? extract( $viewData ) : null;

        print_r($viewData);

        ob_start();
        include ( $filePath );
        $template = ob_get_contents();
        ob_end_clean();

        return $template;
    }
}
?>

我正在使用this tutorial

我希望我的文字html模板像这样

<div class="form-group col-sm-6">
        <div class="select">
            <span class="arr"></span>
            <select data-bind="options: _regions,
                optionsText: 'name',
                optionsValue: 'geonameId',
                value: selectedCountry,
                optionsCaption: 'Country'">
            </select>
        </div>
    </div>

1 个答案:

答案 0 :(得分:1)

编辑:这个问题已被大量修改,因此从一开始就完全回答。

  1. 的index.php
  2. CountrySelect班级已在使用select_template.php

    所以index.php中的代码应该是

    <?php
        require 'scripts/back_end/views/country_select.php';
        require 'scripts/back_end/views/view.php';
        echo CountrySelect::display();
    
    
    ?>
    
    1. 你的模板:
    2. 您的CountrySelect课程已经包含了您的模板,您也将$ viewData作为

      传递
      $viewData = array(
                      "options" => '_countries',
                      "optionsText" => 'name',
                      "optionsValue" => 'geonameId',
                      "value" => 'selectedCountry',
                      "caption" => 'Country'
                  );
      

      使用extract()导出到View :: render()范围 像这样

      ( $viewData ) ? extract( $viewData ) : null;
      

      将$ viewData的每个键都设置为变量名,所以现在一旦提取完成,你将有5个变量 $options, $optionsText, $optionsValue, $value, $caption

      所以你的最终模板应该是

      <div class="form-group col-sm-6">
          <div class="select">
              <span class="arr"></span>
              <select data-bind="options: '<?php echo $options ?>',
                  optionsText: '<?php echo $optionsText ?>',
                  optionsValue: '<?php echo $optionsValue ?>',
                  value: <?php echo $value ?>,
                  optionsCaption: '<?php echo $caption ?>'">
              </select>
          </div>
      </div>