2016-10-24 12 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を渡そうとします。

これは私が試したものです:私は手動で例えば値を設定する場合The argument "arguments" was registered with type "array", but is of type "string" in view helper "TYPO3\CMS\Fluid\ViewHelpers\Link\ActionViewHelper

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

は私が手

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

は、それから私は、応答として 1を取得します。流体中

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

...

:コントローラで

答えて

1

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

私は本当にのsessionStorageが何であるかを取得し、あなたがそれを行うにはしたくありません。 testAction内の$someVariableをsessionStorageに置き換えると、正常に動作するはずです。

+0

問題があり、その代わりに、私はJavaScriptを渡す必要がtest' 'の可変値。例えば'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')}" 

は動作しません。それはメソッドArrayAccessを実装したり、使用プロパティ「テスト」のgetterを持っている上であなたのsessionStorageは、変数、および「アイテム」の場合:

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

ありがとうクラウス! 'sessionStorage.getItem( 'test')'はjavascriptからのもので、正しい構文でなければなりません。私はあなたがPHPとそれを混同している可能性があると思いますか? – Black

関連する問題