2009-06-21 51 views
1

幾小時前我剛開始使用CodeIgniter,並遇到一些問題。我試圖調用一個函數,該函數當前位於名爲admin.php的控制器中。我正試圖從幫手中訪問這個。我將如何正確地做到這一點?我已經試過幾乎所有的東西,但似乎沒有任何工作,當我收到以下錯誤:控制器從助手的訪問功能

Fatal error: Call to a member function login() on a non-object 

在這個問題上的任何幫助,將不勝感激

+0

幫助程序和庫應該獨立於應用程序 - 您不需要從幫助程序或庫調用控制器函數。你能更詳細地描述你的幫手嗎?也許這是屬於管理控制器的代碼。 – jimyi 2009-06-21 22:54:34

回答

2

我jimyi同意。您的幫助程序和庫類應該獨立於應用程序中的任何特定控制器。例如,如果你有一個「頁面標題」助手,它不應該依賴於你的管理控制器的任何特定行爲。如果您想在另一個沒有管理員控制器的應用程序中使用頁面助手,該怎麼辦?或者,如果您對路由器的管理員控制器進行了更改,現在您必須確保這些更改不會損壞您的幫手。

如果您的幫助器功能需要管理員控制器擁有的某些特定位數據,您可以將其作爲控制器的函數參數傳遞。這樣,幫助器就是控制器的依賴關係,而不是控制器是幫助器的依賴關係。

此外,該錯誤消息意味着您所調用的任何事物都沒有正確實例化。所以你很可能是這樣做的:

$this->load(); 

從幫手內。但是,在助手中,

$this
未定義(因此「非對象」錯誤)。 CodeIgniter提供了一種從控制器外部加載模型,庫和視圖的方法。但是,據我所知,它不允許你爲控制器做這件事。這很好,但出於上述原因。引入依賴關係時要小心。