yii2如何访问帖子值

时间:2015-03-03 20:47:54

标签: php yii2

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

此代码来自here,但无论如何我都会进行调整

    $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表单中设置的内容,以便将名称字段改为Newsletter [email]而不仅仅是电子邮件吗?

5 个答案:

答案 0 :(得分:3)

如前所述,您可以使用$_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 
   }
}

答案 1 :(得分:2)

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

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

答案 2 :(得分:0)

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

尝试执行以下操作:

// 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
}

答案 3 :(得分:0)

如果HTML表单字段如下

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

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

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

答案 4 :(得分:-1)

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

相关问题