2016-07-17 13 views
2

私はYii2をもっと深く学んでいるので、ウィジェットがコントローラのアクションに似たものを持つことが可能かどうか疑問に思っていましたか?例ではYii2。ウィジェットとアクション

class WTest extends Widget { 

    public ...; 

    public function init() { 
     ... 
    } 

    public function run() { 
     Pjax::begin(); 
     echo "<a href='".Yii::$app->urlManager->createAbsoluteUrl("test/add")."'>Add test</a>"; 
     Pjax::end(); 
    } 

    public function addThing() { 
     echo "hola" 
    } 
} 

は次にコントローラでの操作を行います。

class TestController extends Controller 
{ 
    public function actionAdd() { 
    $wObj = new WTest; 
    return $wObj->addThing(); 
    } 
} 

をこの方法で問題がI以来、私は形でウィジェットを呼び出すときに設定されたすべてのパラメータを失うということです「新しいWTest」と呼ばれ、新しいインスタンスです。私も静的メソッドを使用してみましたが、同様の問題、任意のアイデアですか?ビューで

UPDATE は、私はこのようなウィジェットを呼び出しています:

 WTest::widget([ 
      'test' => 'hi' 
     ]); 
+0

1つのインスタンスのみを持つようにしたい場合は、あなたはそれのために 'singleton'パターンを使用する必要があります。 – ThanhPV

+0

私に例を挙げてもらえますか?私はこのケースでシングルトンをどのように適用するか分かりません – Eduardo

答えて

2

更新:private __contruct(), __clone()を削除し、依存性注入を使用しyii2。 クラスWTestで、あなたには、いくつかの機能と変数を定義する必要があります

class WTest extends Widget 
{ 
    /** 
    * @var WTest The reference to *WTest* instance of this class 
    */ 
    private static $instance; 

    /** 
    * Returns *WTest* instance of this class. 
    * 
    * @return WTest The *WTest* instance. 
    */ 
    public static function getInstance() 
    { 
     if (null === static::$instance) { 
      static::$instance = new static(); 
      //Add more attribute and do many stuff here 
     } 

     return static::$instance; 
    } 

    //If you want set value for variable, use yii2 DI 
    /** @var string $test */ 
    public $test; 
} 

をそして、あなたのアクションで使用します。ビューで

public function actionAdd() { 
    $wObj = WTest::getInstance(); 
    return $wObj->addThing(); 
} 

用途:

WTest::widget([ 
    'test' => 'value', 
]); 

は、それが参考に願っています。

シングルトンパターンの詳細:http://www.vincehuston.org/dp/singleton.html

おかげで楽しいです! ThanhPVから

+0

時間をとってくれてありがとう。私はそれを試して、これを試してみましょう:) – Eduardo

+0

それは動作しないようです:1.クローンと構造はスーパークラスから公開されたメソッドである必要があります。 2.ビューからウィジェットを呼び出すときにパラメータを渡しますが、どのようにシングルトンを使用することができますか? – Eduardo

+0

私は自分の答えを更新します。変数に値を注入したいのであれば、シングルトンは必要ありません。依存性注入で設計されたYii2。 – ThanhPV

0

回答は完全に右ではなかったが、それは依存性注入を使用して、正しい方向に私を導く:)

関連する問題