yii2我如何访问post值


yii2 how can I access post value

我的控制器中有以下代码,试图在添加验证等之前使其工作

这个代码来自这里,但我无论如何都会修改它

    $email = $_POST['Newsletter[email]'];
    $session->save_email($email);
    // Subscribe User to List
    $api_key = new sammaye'mailchimp'Mailchimp(['apikey' => 'xxxxxxxxxxx']);
    $list_id = "xxxxxxxxxxx";
    $Mailchimp = new Mailchimp( $api_key );
    $Mailchimp_Lists = new Mailchimp_Lists( $Mailchimp );
    $subscriber = $Mailchimp_Lists->subscribe( $list_id, array( 'email' => $email ) );

然而,我得到了以下错误(这是否意味着我的大部分数据都在数组新手中)

Undefined index: Newsletter[email]

这是我需要在yii2表单中设置的内容吗?这样,名称字段就不再是时事通讯[电子邮件],而只是电子邮件?

您可以按如下方式执行此操作:

if (Yii::$app->request->post()) {
    $data = Yii::$app->request->post();
    $email = $data['NewsLetter']['email'];
}

如前所述,您可以使用$_POSTrequest-对象。该对象包含启动时进入应用程序的所有内容。所以是的,'Yii::$app->request->post()会给你所有传入的POST数据,'Yii::$app->request->post('name')会给你一个。与get功能相同。

然而,考虑到你的代码,这不是你应该如何使用Yii。变量的名称表明帖子是使用模型完成的,所以你可能想再次使用它,这会使验证更加容易。

如果你没有模型,它可能看起来是这样的:

class Newsletter extends 'yii'base'Model
{
   public $email;
   public function rules()
   {
      return array(
        array('email', 'email', 'skipOnEmpty' => false)
      );
   }
}

控制器中的实际代码可能更多地位于行中:

$request = 'Yii::$app->request;
if ($request->isPost) {
   $newsletter = new Newsletter;
   if ($newsletter->load($request->post()) &&  $newsletter->validate()) {
      // do your thing 
   }
}

这意味着,它在一个数组中。

尝试执行以下操作:

// Using isset will make sure, you don't trigger a Notice (when the variable does not exist)
$email = isset($_POST['Newsletter']['email']) ? $_POST['Newsletter']['email'] : null;
// Make sure you are receiving an email address
if ($email && filter_var($email, FILTER_VALIDATE_EMAIL))
{
    $session->save_email($email);
    // Subscribe User to List
    $api_key = new sammaye'mailchimp'Mailchimp(['apikey' => 'xxxxxxxxxxx']);
    $list_id = "xxxxxxxxxxx";
    $Mailchimp = new Mailchimp( $api_key );
    $Mailchimp_Lists = new Mailchimp_Lists( $Mailchimp );
    $subscriber = $Mailchimp_Lists->subscribe( $list_id, array( 'email' => $email ) );
}
// Display an error message ?
else 
{
    // @todo
}

如果HTML表单字段如下

<input name="Newsletter[email]" type="text">

那么控制器中的代码应该是

$data = Yii::$app->request->post();
$email= $data['Newsletter']['email'];

内联解决方案是:

if(is_null($email = Yii::$app->request->post('Newsletter')['email']))
        throw new BadRequestHttpException('newsletter email must set');

如果是这样的话,如果没有设置电子邮件,它会抛出Bad Request,并注意到当您使用PHP框架时,$_POST不是一个好的解决方案,它的安全性不是由框架提供的,但Yii::$app->request->post由Yii保护。

您应该简单地尝试$_POST['Newsletter']['email']