2012-12-05 3 views
26

Używam framework Yii dla mojego projektu;jak przekazać parametr przekierowania w Yii

mam przekierowanie na stronę po sukcesie wstawienia danych do innego kontrolera przy użyciu

$ this-> redirect ($ this-> createUrl ('kontroler/akcja'));

Podczas przekierowania jest możliwe przejście jakiekolwiek parametry jak w render

$ to-> render ('selectRefiner', tablicę ('param' => $ danych)

+15

Nie rozumiem, dlaczego ludzie nie odnoszą się do dokumentacji. A dokumentacja yiis jest na najwyższym poziomie w przeciwieństwie do innych frameworków. Po prostu wyślij ją jako tablicę, w której pierwszym elementem jest akcja kontrolera, a reszta to pary wartości klucza, które możesz pobrać jako zmienne GET. – itachi

+4

@itachi dla mnie dokumentacja yii niezbyt czytelna –

Odpowiedz

53

Spróbuj:

$this->redirect(array('controller/action', 'param1'=>'value1', 'param2'=>'value2',...)) 

api yii 1, api yii 2

+0

Byłoby świetnie, gdybyś mógł wyjaśnić, jak uzyskać tę wartość w nazwie akcji? Dzięki. – Varundroid

+0

Możesz uzyskać wartość w akcji z - $ _REQUEST LUB $ _GET. – Rishabh

+0

... lub jeśli wprowadzisz je w parametrach zwanych funkcją - tak jak ta publiczna funkcja actionAction ($ param1, $ param2, ...) –

0

spróbuj tego:

Yii::$app->response->redirect(['site/dashboard','id' => 1, 'var1' => 'test']); 
+0

Dodaj wyjaśnienie z odpowiedzią, aby dowiedzieć się, w jaki sposób ta odpowiedź pomaga OP w ustalaniu bieżącego problemu. –

+0

. chcę przekierować do innego modelu ... funkcja renderowania dobrze dla strony przekierowania dla bieżącego modelu, ale chcę przekierować jeden model do innego ... –

2

można przekazać tylko dostać parametrów w Yii 2 redirect(). Miałem jednak podobną sytuację i rozwiązałem ją, używając pamięci Session.

Naturalnie można uzyskać dostęp do bieżącej sesji za pośrednictwem Yii::$app->session. Oto przykład użycia go w dwóch oddzielnych działań kontrolera:

public function actionOne() { 
    // Check if the Session is Open, and Open it if it isn't Open already 
    if (!Yii::$app->session->getIsActive()) { 
     Yii::$app->session->open(); 
    } 
    Yii::$app->session['someParameter'] = 'Bool/String/Array...'; 
    Yii::$app->session->close(); 
    $this->redirect(['site/two']); 
} 

public function actionTwo() { 
    if (isset(Yii::$app->session['someParameter']) { 
     $param = Yii::$app->session['someParameter']; 
    } else { 
     $param = null; 
    } 
    $this->render('two', [ 
     'param' => $param 
    ]); 
} 

Więc teraz powinieneś być w stanie uzyskać dostęp $param wewnątrz widoku two.

Aby uzyskać więcej informacji, zapoznaj się z oficjalną dokumentacją klas.

0

Aby przekierować na tę samą akcję z wszystkimi parametrami, które już mają to działa dla mnie.

$this->redirect($_PHP['SELF']);