我在控制器中有以下代码,试图在添加验证之前使其工作
此代码来自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]而不仅仅是电子邮件吗?
答案 0 :(得分:3)
如前所述,您可以使用$_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
}
}
答案 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']
。