2017-11-27 7 views
1

beforeActionbehaviorを使用して、私のコントローラーのメソッド内で$idパラメーターをオンザフライで変更しようとしています。参考までに、私はHashIdsを使用し、どこにでも変換する必要があります。$_GET['id']は整数にハッシュされるかもしれません。Yii2 - ビヘイビアを使用してコントローラアクションのパラメータを変更するにはどうすればよいですか?

動作をの動作を使用してオンザフライで自動的に$ _GET ['id']を変更する動作を使用できますか?

私のコントローラの例アクション:

public function actionView($id){ 
    // run code to process $id here back to integer using a behavior 
    echo $id; //should be an integer 
} 

私のサンプルURL:http://mydomain/posts/view?id=3QhLp

(または、おそらくこれを行うには良い方法は、カスタムURLルールを作成するのですか?)

答えて

2

次のような\yii\base\Behaviorから拡張されたクラスを実装する必要があります。

<?php 

namespace backend\models; 

use Yii; 
use yii\base\Behavior; 
use yii\web\Controller; 

class Transformer extends Behavior 
{ 
    public $id = ''; 

    public function events() 
    { 
     return [Controller::EVENT_BEFORE_ACTION => 'transform']; //mounting the handler to the 'beforeAction' event on the controller. 
    } 

    public function transform() 
    { 
     $_GET['id'] = $this->id . "transformed";  //mock method here 

     return true; 
    } 
} 
お使いのコントローラで次に

、次のようにコードを追加:

public function behaviors() 
{ 
    return [ 
     'transformer' => [ 
      'class' => \backend\models\Transformer::className(), //Modify the path to your real behavior class. 
      'id' => Yii::$app->request->get('id'), 
     ], 
    ]; 
} 

は、あなたのアクションで Yii::$app->request->get('id')にアクセスするには、あなたは、変換されたURLのparamが表示されます。

+0

コントローラから 'Yii :: $ app-> request-> request-> get( 'id')'にアクセスできます。しかし、 '$ id'(アクションのパラメータセット)にアクセスすることはできません。 。このようにすれば、 '$ id'を使用するあらゆるアクションを書き直さなければなりません。最終ステップを実装する方法は何ですか? – friek108

+1

私が知る限り、動作メソッドのparamは、元のurl文字列を振る舞いの中で変更することができない限り、 '$ _GET'ではなく、urlManagerのルールを使って元のurlから解析されます。これが役立つかもしれない。 –

+0

あなたはできるとは思わないし、そうであればカスタムURLルールとして実装するほうがよいでしょうか?そして、行動ではなく、そこに変換? – friek108

関連する問題