我的控制器中有以下代码,试图在添加验证等之前使其工作
这个代码来自这里,但我无论如何都会修改它
$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'];
}
如前所述,您可以使用$_POST
或request
-对象。该对象包含启动时进入应用程序的所有内容。所以是的,'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']
。