18-03-1394، 08:50 ب.ظ
18-03-1394، 09:41 ب.ظ
خیر، هر شئ از هر مدل، توی معماری ActiveRecord فقط و فقط نماینده یک رکورد از جدول مربوطه است.
18-03-1394، 09:49 ب.ظ
خب در جلسه 9 actionView فایل issueController رو ببینید
public function actionView($id) { $issue=$this->loadModel($id , false); $comment=$this->createComment($issue); $this->render('view',array( 'model'=>$issue, 'comments' => $comment, )); }اینم از CreateComment
protected function createComment($issue){ $comment= new Comment; if(isset($_POST['Comment'])){ $comment->attributes=$_POST['Comment']; if ($issue->addComment($comment)){ Yii::app()->user->setFlash('commentSubmitted' , 'your comment has been send'); $this->refresh(); } } return $comment; }و اینم View که داره کل کامنت ها رو نشون میده
<?php foreach($comments as $comment): ?> <div class="comment"> <div class="author"> <?php echo $comment->author->username; ?>: </div> <div class="time"> on <?php echo date('F j, Y at h:i a',strtotime($comment->create_time)); ?> </div> <div class="content"> <?php echo nl2br(CHtml::encode($comment->content)); ?> </div> <hr> </div><!-- comment --> <?php endforeach; ?>
18-03-1394، 09:51 ب.ظ
خوب این بخاطر اینه که توی کنترلر اومدیم تمام کامنتهای یک پست رو خوندیم و توی آرایه comments$ ریختیم. درواقع هر خونه از این آرایه یک شئ از کلاس ActiveRecord هست که معادل یک رکورد در جدول Comments محسوب میشه.
18-03-1394، 09:58 ب.ظ
میشه بگید دقیقا کجا ؟
اینم از loadMoadel مون
اینم از loadMoadel مون
public function loadModel($id , $withComments=FALSE) { if ($withComments){ $model=Issue::model()->with(array('comments'=>array('with'=>'author')))->findByPk($id); }else{ $model=Issue::model()->findByPk($id); } if($model===null) throw new CHttpException(404,'The requested page does not exist.'); return $model; }
18-03-1394، 10:16 ب.ظ
کدی که شما برای ویو گذاشتین، comments.php_ هست درحالی که ما توی کنترلر ویوی view.php رو رندر کردیم. توی view.php خطوط 46 به بعد این کدها وجود داره:
<div id="comments"> <?php if($model->commentCount >= 1): ?> <h3> <?php echo $model->commentCount > 1 ? $model->commentCount . ' comments' : 'One comment'; ?> </h3> <?php $this->renderPartial('_comments', array('comments' => $model->comments)); ?> <?php endif; ?> <h3>Leave a Comment</h3> <?php if(Yii::app()->user->hasFlash('commentSubmitted')): ?> <div class="flash-success"> <?php echo Yii::app()->user->getFlash('commentSubmitted'); ?> </div> <?php else: ?> <?php $this->renderPartial('/comment/_form', array('model' => $comment)); ?> <?php endif; ?> </div>که اگه دقت کنید، به خوبی متوجه میشین که کجا، comments$ ساخته میشه و برای comments.php_ ارسال میشه.
18-03-1394، 10:30 ب.ظ
منظورتون این خطه
باز اگه دقیقتر نگاه کنیم این کامنتا به وسیله متد createComment در actionView ساخته شده و درون createComment هم یک شی از مدل کامنت ساخته شده
هنوز واسم مبهمه کجا کل کامنتامون داره ساخته میشه؟
<?php $this->renderPartial('_comments', array('comments' => $model->comments)); ?>
باز اگه دقیقتر نگاه کنیم این کامنتا به وسیله متد createComment در actionView ساخته شده و درون createComment هم یک شی از مدل کامنت ساخته شده
هنوز واسم مبهمه کجا کل کامنتامون داره ساخته میشه؟
19-03-1394، 01:18 ق.ظ
شما هربار که یک کامنت جدید ثبت میکنید، createComment صدا زده میشه ولی model->comments$ داره با کمک Relation تعریف شده توی مدل Issue کامنتهاش رو از دیتابیس میخونه و هیچ ارتباطی به createComment نداره.