使用redirect()将数组作为参数

时间:2018-03-17 01:57:29

标签: yii2

我使用方法redirect()获取以下异常

时,无法将数组作为参数
Bad request(404):
Invalid data for parameter "Mailadresses"
var_dump上的

$Mailadresses显示了这一点:

array(2) {
    [0] => string(22) "goetz.bewerber@gmx.net" 
    [1] => string(25) "zetkin.bewerber@gmail.com"
}

这取决于用户的选择,数组中有多少个元素,所以我无法将额外的项目作为参数放在数组中

任何想法,如何将数组作为参数赋予Controller中的actionMethod? 这是代码:

return $this->redirect(['/mail/mail-ausgang/stapelmail', 
'IdPerson' => $id_person, 
'Mailadresses' => $Mailadresses]);

P.S。:如果我的意图不能用redirect()来实现,应该使用哪种方法?请注意,actionMethod位于另一个类

改述问题: 我想实现从类MailAusgangController发送电子邮件。邮件地址位于数据库中,将通过CheckboxColumns由用户选择从类BewerberController收集。 CheckboxColumns将分别给我id Mailadresses。班级MailAusgangController对此没有任何了解,这就是我必须将此信息作为数组提供的原因

这是重定向类

的代码
    public function actionCollectMailAdresses() {
        $session = new Session();
        $Mailadresses = array();
        $x = 0;
        try {
            $checkbox = (array) Yii::$app->request->post('selection');
            if (empty(($checkbox)) && (isset($_POST['button_checkBoxes']))) {
                $session->addFlash("warning", "Selektieren Sie die Bewerber, für die Mails erstellt werden sollen, über die Checkboxen");
                return $this->redirect(['/bewerber/bewerber/index']);
            }
            /* checkBox enthält die Id */
            foreach ($checkbox as $item) {
                $id_person = Bewerber::findOne(['id' => $item])->id_person;
                $IdEKontakt = EKontakt::findOne(['id_person' => $id_person])->id;
                $mailAdress = KontaktMail::findOne(['id_e_kontakt' => $IdEKontakt]);
                if (empty($mailAdress)) {
                    $session->addFlash("warning", "Für mindestens einer der Bewerber ist im System keine Mailadresse hinterlegt.<br>Überprüfen Sie bitte die Tabellenspalte Bewerber/Kandidat auf Mailadressen");
                    return $this->redirect(['/bewerber/bewerber/index']);
                } else {
                    $mailAdress = KontaktMail::findOne(['id_e_kontakt' => $IdEKontakt])->mail;
                    $Mailadresses[$x] = $mailAdress;
                    $x++;
                }
            }
            return $this->redirect(['/mail/mail-ausgang/stapelmail', 'Mailadresses' => $Mailadresses]);
        } catch (\Exception $error) {
            $go_back = "/bewerber/bewerber/index";
            error_handling::error_without_id($error, $go_back);
        }
    }

1 个答案:

答案 0 :(得分:0)

由我自己得到: 由于无法使用方法redirect()提供复杂的数据类型,因此我决定使用SESSION来获取类MailausgangController中的数组。 这是代码(在BewerberController:)

   $sessionPHP = Yii::$app->session;
   $sessionPHP->open();
   $sessionPHP['var'] = $Mailadresses;
   return $this->redirect(['/mail/mail-ausgang/stapelmail']);

并在MailAusgangController中:

 $session = Yii::$app->session;
 $session->open();
 $quelladresse = $session['var'];
 var_dump($quelladresse);
 die();

var_dump会按预期向我显示地址