yii找不到renderPartial变量

时间:2013-01-18 17:40:41

标签: php yii renderpartial

  

可能重复:
  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;捐款))

知道我在这里做错了什么?

1 个答案:

答案 0 :(得分:1)

你的问题有点不清楚,但听起来像renderPartial导致了未定义的变量问题。作为参考,完整的错误消息将是有用的(即包括行号和文件名部分)。

通过renderrenderPartial传递给视图的任何内容都将具有与param数组中的键相同的变量名称。请注意,renderPartial不会继承任何内容,即使它是从视图本身调用的。

例如,您目前有:

<?php $this->renderPartial('/donations/_form',array(
            'model'=>$donations, )); ?>

在这种情况下,在您的视图中,您需要使用$model来访问您通过数组传递的任何内容(即$ donations)。

如果此renderPartial位于您的display视图中,那么您实际上是将模型设置为传入该视图的任何内容,在这种情况下是捐赠。请注意,当您传入模型,部件和捐赠时,这会非常混乱,然后您将调用另一个视图来处理变量名称。

您收到错误是因为您的视图正在尝试使用$donations,并且您没有通过“捐赠”作为数组中的键传递任何内容。