رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
میزان رعایت اصول mVC
#1
دوستان لطفا این کدهای منو ببینید می خوام بدونم چقدر استاندارد و قوانین MVC توش رعایت شده
هم کنترلر رو مزارم هم ویو


کنترلر



class articlesController extends controller {
    public $article;
    public $ads;
    public function __construct() {
        $this->article = new articles();
        $this->ads = new ads();        
    }
    public function actionIndex(){
        $adsData = $this->ads->getLatest();
        $article = $this->article->getAll();
        $display     = $this->article->paging->display();
        $recordsInfo = $this->article->paging->recordsInfo();
        $pagesInfo   = $this->article->paging->pagesInfo();
        $this->renderView('index',array('adsData'=>$adsData,'articles'=>$article,'display'=>$display,'recordsInfo'=>$recordsInfo,'pagesInfo'=>$pagesInfo));
    }
    
    public function actionShow($params){
        $id = $this->getParams('id', $params);
        $adsData = $this->ads->getLatest();
        $data = $this->article->getById($id);
        $this->renderView('show',array('data'=>$data,'adsData'=>$adsData));
    }
    public function checkHit($id){
       $hit = $this->article->hit($id);
       if($hit > 0 ){
           return $hit;
       }else{
           return 0;
       }
    }
    public function actionComment(){
        $this->article->addComment();
    }
    public function actionCountComment($id){
        return $count = $this->article->countComments($id);
    }
    
    public function actionShowComments($articleId){
        return $comments = $this->article->showComments($articleId);
    }
    
    public function actionRelated($catId){
        return $Related = $this->article->getRelated($catId);
    }
    
    
}

پاسخ
تشکر شده توسط:
#2
ویو


<?php
    $config = loader::load('Configs'); 
    loadFunc::runFunc('jdf');
    $hit = $this->checkHit($data['id']);
?>
<div class="maincol">
	
    <div class="post">

        <h1><?php echo $data['title']?></h1>

        <div class="entry">
            <p class="before_story">نوشته شده توسط <span style="text-transform:uppercase;">مدیر</span> - </p>
            <ul class="post_stats">
            <li class="commentpop">
                <span><?php echo $this->actionCountComment($data['id']) ?></span> نظرات
            </li>
            <li class="votepop">

            </li>				
            <li class="viewnum"><?php echo $hit ?> بازدید ها</li>
            <li>
                <!--like-->
            </li>
            <li>
                <!--disLike-->
            </li>                                
            <li class="printit">                                    
                    <a href="" title="چاپ کنید" rel="nofollow">چاپ کنید</a>
            </li>
    </ul>
        <div class="clear"></div>
         
        <div class="niceline"></div>
    <p style="text-align: justify;">
    <a href="#">
        <img class="alignnone  wp-image-25784" src="<?php echo $config->baseUrl ?>uplfls/<?php echo $data['picture']?>" alt="<?php echo $data['title']?>" width="661" height="372" />
    </a>
    <?php echo $data['description']?>
    </p>
    <div class="clear"></div>
    <div class="niceline"></div>
    <ul class="post_stats stats2">
            <li class="commentpop">
                <span><?php echo $this->actionCountComment($data['id']) ?></span> نظرات
            </li>
            <li class="votepop">

            </li>				
            <li class="viewnum"><?php echo $hit ?> بازدید ها</li>
            <li>
                <!--like-->
            </li>
            <li>
                <!--disLike-->
            </li>                                
            <li class="printit">                                    
                    <a href="" title="چاپ کنید" rel="nofollow">چاپ کنید</a>
            </li>
    </ul>
            <div class="clear"></div>
            <div class="niceline"></div>
    </div>

            <div class="related">
                <div class="related_header">مطالب مرتبط</div>
                <?php
                $related = $this->actionRelated($data['cat_id']);
                foreach($related as $rel){
                   echo " <div class=\"related_big\">
                        <a href=\"$config->baseUrl/uplfls/articles/{$rel['picture']}\">
                            <img src=\"$config->baseUrl/uplfls/articles/{$rel['picture']}\" alt=\"\" title=\"\" width=\"200\" height=\"140\" />
                        </a>
                        <div class=\"related_title\">
                            <a href=\"{$config->baseUrl}articles/show/id/{$rel['id']}\" title=\"\">{$rel['title']}</a>
                        </div>
                    </div>";
                }
                ?>
                <div class="clear">

                </div>
                <div class="related_s"></div>
                <div class="clear"></div>

            </div>            


    </div>

		
<div class="comments-wrap">


    <h3 id="comments">نظرات</h3>


    <ol class="commentlist">
        <?php 
            $comments = $this->actionShowComments($data['id']);            
            foreach($comments as $comment){                
               echo  "<li class=\"comment even thread-even depth-1\" id=\"li-comment-3824\">	
                    <div id=\"comment-3824\">
                        <div class=\"comment-author vcard\">
                            <img alt='' src='' srcset='' class='avatar avatar-48 photo' height='48' width='48' />
                        </div>
                        <div class=\"comment-meta commentmetadata\">
                            <cite class=\"fn\"></cite>
                        </div>

                        <p>{$comment['body']}</p>
                    </div>
                    <div class=\"clear\"></div>
                </li>";
            }
          ?>
    </ol>
    <div class="clear"></div>
    <div id="respond">
        <form action="" method="post" id="commentform">

            <p>
            <input class="text" type="text" name="author" id="author" value="" size="22" tabindex="1" />
            <label for="author">اسم شما *</label>
            </p>
            <p>
            <input class="text" type="text" name="email" id="email" value="" size="22" tabindex="2" />
            <label for="email">ایمیل شما *</label>
            </p>
            <p>
                <input class="text" type="text" name="url" id="url" value="" size="22" tabindex="3" />
                <label for="url">وب سایت شما</label>
            </p>


            <p>
                <textarea name="comment" id="comment" tabindex="4"></textarea>
            </p>

            <p>
                <input type="hidden" name="article_id" value="<?php echo $data['id'] ?>">
                <input class="submit" name="submit" type="submit" id="submit" tabindex="5" value="ارسال نظر" />
            </p>				
        </form>
        <?php
            $this->actionComment();
        ?>

    </div>


</div>
    <div class="clear"></div>

</div>
    <?php 
        $this->renderPartial('ads',array('adsData'=>$adsData));
    ?>
<ul class="sidebar">
    <li id="recent-posts-2" class="widget widget_recent_entries" style="border-radius: 5px;" >
        <h3><span class="title">تازه ترین ها</span></h3>
        <ul>
            <li style="border-radius: 5px;">
                <a href=""></a>
            </li>
        </ul>
    </li>
    
</ul>
<div class="clear"></div>




پاسخ
تشکر شده توسط:
#3
اصول خوب رعایت شده ولی یه سری جاها زیادی سخت گرفتین. مثلاً بجای کد زیر:
<?php echo $this->actionCountComment($data['id']) ?>

میشد مدل article$ رو برای ویو بفرستین و اینطوری بنویسید:
<?php echo $article->countComments($id); ?>

کلاً از این دید که ویو حق نداره مستقیماً به مدل دسترسی داشته باشه بیاین بیرون. فقط بهتره کارهای ویرایشی روی داده ها (حتی با کمک مدل) توی کنترلر انجام بشه. مواردی مثل خوندن و... رو واقعاً لازم نیست بصورت اکشن یا متد عادی توی کنترلر در بیارین و صدا بزنین.

ضمناً بجای چنین کدی:
$this->renderView('index',array('adsData'=>$adsData,'articles'=>$article,'display'=>$display,'recordsInfo'=>$recordsInfo,'pagesInfo'=>$pagesInfo));

میتونستین این شکلی بنویسین:
$this->renderView('index',compact('adsData','articles','display','recordsInfo','pagesInfo'));

یعنی اگه آرایه ای دارین که اندیسهاش، اسم متغیرهای معادل خودشونه، میتونید با compact اون مقادیر رو بصورت آرایه فشرده کنید و بفرستین. این تابع برعکس extract عمل میکنه:

$name = 'ali';
$family = 'hoseini';

$info = compact('name', 'family'); // = array('name' => $name, 'family' => $family)

$info = array('name' => 'Reza', 'family' => 'Kamalian', 'father' => 'Mohammad');
extract($info);
// $name = 'Reza';
// $family = 'Kamalian';
// $father = 'Mohammad';

از امکانات PHP برای زندگی بهتر استفاده کنید!
پاسخ
تشکر شده توسط: sm_pakdel , محسن نوری , mahmod.net
#4
ممنون
بحث compact رو بلد نبودم
بازم ممنون از راهنمائیتون
پاسخ
تشکر شده توسط:




کاربران در حال بازدید این موضوع: 1 مهمان