2013-10-30 40 views
0

使用MVC我有一個模型目錄裏面有兩個文件; menu.xml和下面的model.php。在php中的基本變量範圍

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

在我的看法目錄我有一個的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

這並不真的有什麼關係 「變量範圍」。作爲未來的一個小竅門,它也可以用一個更簡單的例子來說明,它可以幫助你和其他人更快地看到問題的出處。 – IMSoP

回答

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'); 
+0

請注意,對於舊版本的PHP(我認爲5.3之前的任何內容,但可能是錯誤的)沒有'__DIR__',但是可以通過'dirname(__ FILE __)'獲得相同的值。而且,對於'include'線本身也應該使用相同的術語,而不是依賴具有正確含義的'../',因爲在某些情況下,「當前目錄」可能是一個滑溜的概念。 – IMSoP