可能重复:
PHP: “Notice: Undefined variable” and “Notice: Undefined index”
我正在尝试显示一个表单,以便在视图中创建新的捐赠,从而呈现广告系列或者更确切地说是一个广告系列...
显示传递给视图的广告系列数据效果很好,但是当我将代码添加到renderPartial时,我不断收到PHP通知“未定义的变量:捐赠”。
在CampaignsController中,我正在使用此代码:
public function actionDisplay($id)
{
$campaign=$this->loadModel($id);
$donations=$this->createDonations($campaign);
$params = array('User_ID'=>$campaign->campaign_user);
if(Yii::app()->user->checkAccess('displayCampaigns') || Yii::app()->user->checkAccess('displayOwnCampaigns',$params)){
$this->parts=array(
'banner'=>Images::model()->getImageUrl($campaign->campaign_banner),
'avatar'=>Images::model()->getImageUrl($campaign->campaign_avatar),
'copy'=>$campaign->campaign_copy,
'campaign_name'=>$campaign->campaign_name,
);
$parts = $this->parts;
$this->layout='//layouts/campaignlayout1';
$this->render('display',array(
'model'=>$campaign,
'parts'=>$parts,
'donations'=>$donations,
));
} else {
throw new CHttpException(403,"You can only display your own Campaign");
}
}
这里的功能createDonations()也在CampaignsController中,并由$ donations = $ this-> createDonations($ campaign)
调用 protected function createDonations($campaign) {
$newdonation = new Donations;
if(isset($_POST['Donations'])) {
$newdonation->attributes=$_POST['Donations'];
if($issue->addDonations($newdonation)) {
Yii::app()->user->setFlash('donationsSubmitted',"Your Donation has been added." );
$this->refresh();
}
}
return $newdonation;
}
在布局campaignlayout1中,我首先从$ campaign和$ parts渲染数据。这很好,所以我添加了一个renderPartial()来显示来自捐赠的_form - 这是代码:
<?php $this->renderPartial('/donations/_form',array(
'model'=>$donations, )); ?>
我收到PHP通知:未定义的变量:捐款
这是堆栈跟踪的一部分:
/protected/controllers/CampaignsController.php(232):CController-&gt; render(“display”,array(“model”=&gt; Campaigns,“parts”=&gt; array(“banner”=&gt;“ http://imsgonline.com/yiitest/images/genericbanner.jpg“,”avatar“=&gt;”http://imsgonline.com/yiitest/images/genericmale.jpg“,”copy“=&gt;”
汇款
“,”campaign_name“=&gt;” Joes筹款“),”捐款“=&gt;捐款))
知道我在这里做错了什么?
答案 0 :(得分:1)
你的问题有点不清楚,但听起来像renderPartial导致了未定义的变量问题。作为参考,完整的错误消息将是有用的(即包括行号和文件名部分)。
通过render
或renderPartial
传递给视图的任何内容都将具有与param数组中的键相同的变量名称。请注意,renderPartial
不会继承任何内容,即使它是从视图本身调用的。
例如,您目前有:
<?php $this->renderPartial('/donations/_form',array(
'model'=>$donations, )); ?>
在这种情况下,在您的视图中,您需要使用$model
来访问您通过数组传递的任何内容(即$ donations)。
如果此renderPartial
位于您的display
视图中,那么您实际上是将模型设置为传入该视图的任何内容,在这种情况下是捐赠。请注意,当您传入模型,部件和捐赠时,这会非常混乱,然后您将调用另一个视图来处理变量名称。
您收到错误是因为您的视图正在尝试使用$donations
,并且您没有通过“捐赠”作为数组中的键传递任何内容。