0

重複の可能性:
PHP: 「通知: 未定義の変数」および「通知: 未定義のインデックス」</a>

キャンペーンまたは単一のキャンペーンをレンダリングするビュー内に新しい寄付を作成するためのフォームを表示しようとしています...

ビューに渡されたキャンペーン データの表示は正常に機能しましたが、コードを 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");                 
            }       

    }

これは、CampaignsController にもある関数 createDonations() で、$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 からデータをレンダリングします。それはうまくいったので、寄付から _form を表示するために renderPartial() を追加しました - これがそのコードです:

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

PHP の通知が表示されます: 未定義の変数: 寄付

スタック トレースの一部を次に示します。

/protected/controllers/CampaignsController.php(232): CController->render("display", array("model" => キャンペーン, "parts" => array("banner" => " http://imsgonline.com /yiitest/images/genericbanner.jpg ", "アバター" => " http://imsgonline.com/yiitest/images/genericmale.jpg ", "コピー" => "

送金する

", "campaign_name" => "Joes Fundraising"), "donations" => Donations))

私がここで間違っていることは何か分かりますか??

4

1 に答える 1

0

あなたの質問からは少し不明ですが、renderPartial が未定義変数の問題を引き起こしているようです。参考までに、完全なエラー メッセージ (つまり、行番号とファイル名の部分を含む) が役立ちます。

renderまたはを介し​​てビューに渡すものrenderPartialはすべて、param 配列のキーと同じ変数名を持ちます。renderPartialビュー自体から呼び出された場合でも、何も継承しないことに 注意してください。

たとえば、現在持っているものは次のとおりです。

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

この場合、ビューでは$model、配列を介して渡したもの (つまり $donations) にアクセスするために を使用する必要があります。

これrenderPartialがあなたのdisplayビューにある場合、実際にはモデルをそのビューに渡したもの、この場合は寄付に設定しています。モデル、部品、および寄付を渡したので、これは非常に紛らわしいことに注意してください。次に、変数名を操作する別のビューを呼び出します。

ビューが を使用しようとして$donationsいて、配列のキーとして「寄付」を含むものを渡さなかったため、エラーが発生しています。

于 2013-01-18T17:57:30.697 に答える