2013-06-04 71 views
1

如何在TYPO3的PHP代碼中獲得url parametersTYPO3在PHP控制器中獲取URL參數

我有這樣

<f:link.page pageUid="138" additionalParams="{myname: Lilly}">Click!</f:link.page> 

頁面鏈接附加了一個控制器,現在我怎麼傳遞的參數的值,以我的控制器?

我必須根據傳遞的參數呈現Views

編輯

我不知道如何去這個問題。

我有一個控制器,它有動作listshow。如果parameters發送給show的操作是all,則應顯示所有項目,並且類似地,view將根據傳遞的參數進行更改。

我的問題是:

  1. 如何傳遞參數,如何捕捉到他們的控制器?
  2. 動作控制器的鏈接顯示非常長,看起來非常難看。我如何定製鏈接?是否有像routes通過我可以實現這一目標?
+0

爲什麼要顯示show動作中的所有項目?列表動作是否應該這樣做? 另外,我理解你的權利,你的插件插入多個頁面(一個頁面的列表視圖,另一個顯示視圖的頁面)?你使用兩個插件,還是一個? – Shufla

+0

我只使用一個插件,但使用不同的操作呈現不同類型的視圖。在我的應用程序中,列表操作顯示具有限制的項目,並且我的節目顯示所有項目沒有任何限制並且具有不同的設計 – user2354302

回答

2

您只需使用f:link.action視圖幫助。如果你處於列表動作中,你可以這樣做:

<f:link.action action="show" arguments="{myArgument: myArgument}">Link</f:link> 

這應該將視圖切換到show動作的視圖。

如果您需要捕獲其他參數,您可以$this->request->getArguments()獲取所有參數,或$this->request->getArgument('myArgument')在控制器中獲取特定參數。請注意,這將只包含參數,乾淨地與f:link.action視圖幫助一起發送,因爲這些參數以您當前使用的擴展/插件爲前綴。

如果您使用RealURL,則可以提供一個配置,將URL重寫爲較短的URL。

編輯:

如果你的鏈接需要指向另一頁,你只需要補充一點:如果你需要更先進的視圖助手

<f:link.action action="show" arguments="{myArgument: myArgument}" pageUid="myId">Link</f:link> 
+0

是的。如果我想在'同一頁面上顯示'list'和'show'視圖,你的解決方案就可以適用。但在我的情況下,「列表」視圖顯示在一個頁面上與UID 77和「顯示」在另一個頁面與UID 87. – user2354302

+0

只需將「pageUid」添加到鏈接viewhelper,我已經添加了一個示例到我的文章。 – Shufla

+0

太棒了!你爲我節省了很多時間。謝謝:) – user2354302

1

對於全自動支持的行動,你就需要f:link.action視圖助手然而使用,你發現還沒有 - 它創造

在這種情況下最好的選擇是提及則params的太長集(包括控制器等) f:link.page VH但是,您需要付出更多努力才能找到適當的措施。

您有幾種選擇:

  • 如果你想/可以顯示在單獨的頁面,這些意見,只是創建兩個FE插件,首先將使用show行動默認的,第二 - list行動。然後你可以使用簡化的參數。
  • 使用Typo腳本用於放置插件的頁面上,在這種情況下,你可以使用bootstrap你有不同的默認操作插件 - 根據TS條件(如果param X存在引導與展示,否則有列表)
  • 使用一個動作對於這兩種觀點,並呈現一個獨立的觀點的結果:

    public function show2Action() { 
        $view = t3lib_div::makeInstance('Tx_Fluid_View_StandaloneView'); 
        if (t3lib_div::_GP('myname') == 'Lilly') { 
         $view->setTemplatePathAndFilename(t3lib_extMgm::extPath('yourext') . '/Resources/Private/Templates/Some/Show.html'); 
         $view->assign('message', 'Hello ' . t3lib_div::_GP('myname')); 
        } else { 
         $view->setTemplatePathAndFilename(t3lib_extMgm::extPath('yourext') . '/Resources/Private/Templates/Some/List.html'); 
         $view->assign('message', 'Enter your name'); 
        } 
        return $view->render(); 
    } 
    

不要忘記,以驗證您的數據獲取與_GP

+0

太棒了!這是一個不錯的方法。但是,在控制器中,我們可以使用'$ this-> request-> getArgument('show');'來代替't3lib_div'。但問題是如何檢查參數'show'是否已設置? – user2354302

+0

不,你不能:參數取自完整的參數名tx_something [someelse] = foo - 不是來自單個的GET參數,你問:?name = Lilly,而使用'link.page'而不是'link.action'你需要使用'_GP' – biesior