2014-02-20 83 views
3

在一個情況下的形式操作設置爲一樣的東西:Joomla如何路由到控制器提交表單的方法?

action="<?php echo JRoute::_('index.php?option=com_test&layout=edit&id='.(int) $this->item->id); ?>" 

和表單包含和隱藏輸入:

<input type="hidden" name="task" value="testctrl.save" /> 

怎樣的Joomla路由控制器的方法?

我會明白,如果它在表單操作的任務,但我看不出它如何拿起從隱藏的輸入任務,以路線在testctrl控制器方法

回答

6

這並不複雜。在您的com_mycom目錄中有一個名爲mycom.php的文件。在這裏面你有一些線條看起來像這樣的:

$controller = JControllerLegacy::getInstance('Contact'); 
$controller->execute(JFactory::getApplication()->input->get('task')); 
$controller->redirect(); 

在這裏看到一個例子: https://github.com/joomla/joomla-cms/blob/staging/components/com_contact/contact.php#L15

所以,這就是取任務,實例化控制器對象的實例,並從拉任務隱藏表單輸入值,您指出。它從那裏將任務傳遞給控制器​​。

這裏控制器接收到請求:

https://github.com/joomla/joomla-cms/blob/staging/components/com_contact/controller.php#L19

你可能會問:「爲什麼我看不到它接收組件文件發送它的任務是什麼?」。嗯,這是因爲此組件的控制器是兒童類JControllerLegacy類:

https://github.com/joomla/joomla-cms/blob/staging/libraries/legacy/controller/legacy.php#L701

public function execute($task) 
{ ... } 

此功能是從組件接收任務執行功能。這是控制器任務的父類。希望這一切都合情合理!

+0

謝謝你的乍得! Jobin Jose只是打你:) – doovers

+0

就這麼你知道Jobin Jose的代碼只適用於Joomla 1.5。他提到的文件在Joomal 3.x中不存在: https://github.com/joomla/joomla-cms/tree/staging/libraries/joomla/application –

+1

@ChadWindnagle它不僅僅是它的1.5 2.x –

3

適當的方法當您使用隱藏字段明確設置controller

<input type="hidden" name="task" value="testctrl.save" /> 

<input type="hidden" name="controller" value="testctrl" /> 
<input type="hidden" name="task" value="save" /> 

甚至不SPECI將控制器與任務聯繫起來,只是將它與視圖名稱一起使用。

所有情況下,你喜歡com_test組件文件有test.php

一個文件,它包括的Joomla庫文件。

jimport('joomla.application.component.controller'); 

當你檢查庫文件時,它有兩個獲取相關控制器和模型的函數。

createFileName()getInstance()libraries/joomla/application/component/controller.php

這兩個函數做任務。

上述文件是僅適用爲Joomla 1.5到Joomla 2.x的

編輯

對於Joomla3.x

在的Joomla 3. X上的文件結構點點變更。

而不是jimport('joomla.application.component.controller');的Joomla 3.x的使用

$controller = JControllerLegacy::getInstance('Content'); 

這將調用JControllerLegacylibraries\legacy\controller\legacy.php

你可以找到同樣的功能createFileName() ,getInstance()上面的路徑上。

希望它的幫助..

+0

很感謝!我試圖追查,但無法找到它!這真的很討厭我:) – doovers

+0

只爲其他人檢查出這個答案:這個答案代碼是Joomla 1.5。 Joomla 3.x根本沒有這個文件。 –

+0

我接受了Chads的答案,而不是爲了未來的讀者,因爲它是一個更相關的答案。 – doovers