php中的基本变量范围

时间:2013-10-30 21:23:46

标签: php xml

使用MVC我有一个模型目录,里面有两个文件; menu.xml和以下model.php。

<?php
$xml = simplexml_load_file('menu.xml');
print_r ($xml);
?>

在我的views目录中,我有一个index.php文件,如下所示:

<?php
include '../model/model.php';
print_r($xml);
foreach ($xml->children() as $option)
{    
?>  
    <li><a href='<?= $option->getName() ?>'><?= $option['name'] ?></li>
<?php 
}
?>
</ul> 

在另一个目录中 - 这次是html - 我有以下内容:

<!-- This is the controller -->

<?php

require_once('../includes/helpers.php');
// determine which page to render

if (isset($_GET['page'])) 
    $page = $_GET['page'];
else 
    $page = 'index';

// show page
switch ($page)
{
    case 'index';
        render('templates/header', array('title' => 'Main Menu'));
        render('index');
        render('templates/footer');
        break;
}
?>

这应该显示menu.xml文件的子项列表。如果我直接访问model.php:

<pre>
<?php
$xml = simplexml_load_file('menu.xml');
print_r ($xml);
?>
</pre>

我可以看到$ xml对象的内容。

那么为什么include '../model/model.php命令不起作用?

任何提示赞赏!

由于

1 个答案:

答案 0 :(得分:1)

$xml = simplexml_load_file('menu.xml');

此路径与当前执行的脚本相关。这就是为什么它直接访问model/model.php时有效,而不是从./index.php包含它时。请改用绝对路径:

$xml = simplexml_load_file(__DIR__ . '/menu.xml');

IMSoP编辑

对于PHP版本older than 5.3

$xml = simplexml_load_file(dirname(__FILE__) . '/menu.xml');