我制作了一个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>
答案 0 :(得分:1)
编辑:这个问题已被大量修改,因此从一开始就完全回答。
您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();
?>
您的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>