2016-10-24 56 views
0

我只是嘗試從JavaScript中的價值傳遞給從我的控制器操作,並返回值回:發送JavaScript變量值的控制器動作

這是我的控制器:

<?php 
namespace Black\Test\Controller; 

/** 
* CustomController 
*/ 
class CustomController extends \TYPO3\CMS\Extbase\Mvc\Controller\ActionController 
{ 

    /** 
    * action test 
    * 
    * @return void 
    */ 
    public function testAction() 
    { 
     $myVar = $this->request->getArgument('myVar'); 

     echo "myVar = ". $myVar; 
    } 
} 

我該怎麼辦必須設置我的按鈕,使其工作? 我們假設我嘗試通過sessionStorage項目test

這是我已經試過:

<f:link.action controller="Custom" action="test" arguments="{myVar: sessionStorage.getItem('test')}" class="mbButton">Download</f:link.action> 

我得到:The argument "arguments" was registered with type "array", but is of type "string" in view helper "TYPO3\CMS\Fluid\ViewHelpers\Link\ActionViewHelper

如果我手動e.g設定值:

<f:link.action controller="Custom" action="test" arguments="{myVar: 1}" class="mbButton">Download</f:link.action> 

然後我得到1作爲響應。

回答

1

在控制器:

public function testAction() 
{ 
    $this->view->assign('test', $someVariable); 

...

流體

<f:link.action controller="Custom" action="test" arguments="{myVar: test}" class="mbButton" noCacheHash="1">Download</f:link.action> 

我真的不明白你想用它做什麼的sessionStorage是什麼。如果將testAction中的$someVariable替換爲sessionStorage,它應該可以工作。

+0

的問題是,而不是'test'我必須要通過一個javascript變量值。例如'arguments =「{myVar:sessionStorage.getItem('myItem')}}」'。 這是sessionStorage:https://developer.mozilla.org/de/docs/Web/API/Window/sessionStorage – Black

+1

然後,你必須使用一個佔位符作爲參數,並用javascript'arguments =「{myVar:'替換它__PLACEHOLDER __'}「'。 'onclick =「this.href = this.href.replace(/ __ PLACEHOLDER __/g,sessionStorage.getItem('myItem'))」' –

+0

我已經嘗試過,但後來我重定向到404頁面。它似乎只有在它被硬編碼爲流體按鈕時才起作用:( – Black

1

生成一個帶有佔位符值的鏈接,然後更改該佔位符值會破壞爲該鏈接計算的cHash值。另外,它會在使用相同佔位符的這個和其他鏈接中導致cHash衝突(導致相同的鏈接)。

這是框架的一部分,出於安全原因它是無法避免的。從模板中提供正確的ID;創建一個ViewHelper來處理存儲,如果你需要它以某種方式分開(但是要注意,如果你混合使用緩存和未緩存的插件!)。但最重要的是,使鏈接建立遵循安全規則幷包含值,以便cHash得到正確的計算和驗證。

另外你在arguments參數爲你的鏈接語法錯誤:

arguments="{myVar: sessionStorage.getItem('test')}" 

將無法​​工作。如果您的sessionStorage是一個變量,而「項目」就可以實現了ArrayAccess或擁有的財產「測試」,使用一個getter:

arguments="{myVar: sessionStorage.item.test}" 
+0

謝謝你克勞斯! 'sessionStorage.getItem('test')'是來自javascript,應該是正確的語法。我想你可能已經與PHP混淆了? – Black

相關問題