2010-09-03 106 views
0

我正在嘗試將doctrine2沙箱與默認的Zend Framework應用程序集成。當我嘗試在控制器中使用的命名空間,我得到一個「無效的控制器類(‘索引控制器’)」錯誤doctrine2 zend框架命名空間控制器

這個工程:

use Entities\User, Entities\Address; 


class IndexController extends Zend_Controller_Action 
{ 
... 
} 

這不(但應注意什麼?):

namespace Entities; 


class IndexController extends \Zend_Controller_Action 
{ 
... 
} 
+0

確定您使用的是PHP 5.3? – Iznogood 2010-09-03 02:30:02

+0

是的 - PHP版本5.3.2 – waigani 2010-09-03 04:09:55

回答

3

在第一個示例中,您將名稱空間導入到控制器中。在第二個示例中,您將控制器分配給名稱空間。

導入命名空間允許您引用類而不必使用其全限定類名。

new \Entities\User() // without import 
new User() // with import 

爲您的控制器分配一個名稱空間實際上會更改您的類的完全限定名稱。

new \IndexController() // without namespace 
new \Entities\IndexController() // with namespace 

(一個命名空間中的類可以隨時引用在同一個命名空間的其他類,而不必「使用」它。我懷疑這是你試圖使用選項2的主要原因)。

Zend Framework 1.10仍然是無名的命名空間。解析URL並嘗試加載控制器時,它只會查看默認全局命名空間\IndexController,並且不知道它已分配給用戶定義的命名空間(\Entities\IndexController)。

我的建議是,當在ZF中使用控制器時,不要爲它們分配命名空間。導入工作正常。我們必須等到ZF 2.0才能獲得完整的名稱空間支持。

+0

感謝細節。我不明白的是,爲什麼在控制器名稱前面放置一個前導反斜槓會產生語法錯誤。 \ IndexController和\ Entities \ IndexController都會產生以下錯誤:語法錯誤,意外的T_NS_SEPARATOR,期待T_STRING – waigani 2010-09-05 21:55:26

+0

無論如何,我會接受您的建議,並立即導入命名空間。 – waigani 2010-09-05 21:56:34

+0

我會補充說,Zend框架不是_completely_ namespace無知。簡而言之,MVC控制器目前不能命名空間。其餘的庫代碼,助手,表單等都可以使用命名空間。 – 2010-10-13 04:14:32

0

在通過the manual並閱讀this page的一些內容後,似乎在PHP中想要聲明並圍繞命名空間構造使用第二種語法。所以這會創建像

Entities\IndexController 

所以它不會被Zend發現。

根據這些網站你必須使用用於導入命名空間並使用它。

這就是爲什麼它在你的第一個例子中,而不是在你的第二個例子。

希望我是對的,這有助於!

+0

實體\ IndexController返回以下錯誤:語法錯誤,意外的T_NS_SEPARATOR,期待'{' 我認爲沿着類似的路線,並嘗試\ IndexController更早 - 但我得到了相同的錯誤 – waigani 2010-09-03 04:50:35

+0

但爲什麼你想使用第二個版本^它並不像那樣工作。如果你想導入你輸入的類,使用myobject。所以你想在你的控制器中使用一些東西呢? – Iznogood 2010-09-03 05:00:34