2013-10-28 37 views
0

當我試圖從子控制器使用下列URL返回任務的結果未發現:的Joomla:錯誤500查看請求響應子控制器

index.php?option=com_example&task=subctrl.test&format=json 

,但我不斷收到500 View not found錯誤...

class ExampleControllersSubctrl extends JControllerForm 
{ 
    public function test() 
    { 
       $result= array("val1","val2"); 
     echo json_encode($result); 
    } 
} 

我已經試過命名子控制器文件都Subctrl.php & Subctrl.json.php但既不工作。我相信我不應該需要一個視圖來呈現基於我閱讀過的其他SO帖子的結果,但也許這是不正確的。

這個設置最終將用於返回一個Ajax調用,當我得到它的工作。 我在這裏做錯了什麼?

回答

2

在echo語句或Joomla將繼續處理組件並嘗試調用視圖後添加一個exit語句。由於沒有設置視圖值,因此不會查找視圖,系統將重定向到錯誤頁面。下面的完整代碼:

class ExampleControllerSubctrl extends JControllerForm 
{ 
    public function test() 
    { 
     $result= array("val1","val2"); 
     echo json_encode($result); 
     exit(); 
    } 
} 

的Joomla也可以使用,如呼叫jexit()JFactory::getApplication()->close()一些其他的方法。總的想法是讓應用程序停在這裏。繼續是浪費。

此外,必須確保類名設置正確。中間工作應該是Controller而不是Controllers

+0

感謝大衛的迴應!我嘗試了你的建議(所有3個版本,但仍然得到相同的錯誤,還有什麼可能是錯誤的?) – doovers

+0

在這種情況下,函數甚至沒有被調用,而這可能是因爲你的類命名錯誤應該是'ExampleControllerSubctrl '(控制器不是控制器) –

+0

嗨大衛,經過一些實驗後,我發現它取決於包含文件夾的名稱,所以如果文件夾被命名爲控制器它是ExampleControllersSubctrl,或者如果它被稱爲控制器,則將類放入類名中。認爲這個問題可能是因爲如果你使用J3 MVC模型的話,控制器中的執行功能是不可能的,但我可能是錯的,我可能會嘗試爲ajax調用創建一個新的控制器,但也許那不是正確的方式去... – doovers

1

問題是,如果你沒有提供JControllerForm,那麼它會嘗試猜測你的formview

在Joomla 2.5上,您可以將JControllerForm更改爲JController,這將解決問題。

由於您有一個JSON控制器,Joomla通過format=json路由您,您不需要退出您的test()方法。

+0

嗨,謝謝你的答覆。我試過改變到JController,但仍然沒有運氣...還有什麼我可以嘗試嗎? – doovers

+0

這沒有意義。你可以添加你的組件的目錄結構到問題,包括文件名......它似乎像Joomla可能不會路由到您的JSON控制器。你在'example.php'和'controller.php'中有什麼? – Craig

+0

嗨我會在一小時或2小時內添加dir結構和其他代碼,但我已經添加了一些語法錯誤到控制器中,以檢查joomla是否通過它進行路由,並且是打破了佈局。 ..所以它看起來就是這樣!還有哪個是正確的Subctrl.php或Subctrl.json.php? (我都試過了!) – doovers