2016-07-04 4 views
2

Ich mache eine Anwendung mit Yii2 Framework und ich bin mir nicht sicher, ob ich alles richtig mache. Hierist es korrekt nach OOP und MVC Prinzipien (PHP)?

ist eine Aktion von meinem Controller:

public function actionView($id) 
{ 
    $model = $this->findModel($id); 
    $pictures = new Pictures(); 
    $upload = new UploadForm(); 
    $views = new Views(); 

    $contacts = $model->getContacts($model->user_id); 
    $contact = $model->contact($model->user_id); 

    $buttons = [ 
     'update' => '', 
     'delete' => '', 
    ]; 

    $gallery = '_gallery'; 
    $value = ''; 

    if (!Yii::$app->user->isGuest) { 
     $isInBookmarks = Bookmark::find()->where([ 
      'user_id' => Yii::$app->user->identity->getId(), 'advert_id' => $id 
     ])->all(); 

     if (!empty($isInBookmarks)) { 
      $value = 'Delete ' . 'from bookmarks'; 
     } else { 
      $value = 'Add to bookmarks'; 
     } 

     if ($model->user_id == Yii::$app->user->identity->getId()) { 
      $buttons['update'] = Html::a('Update advert', ['update', 'id' => $model->id], [ 
       'class' => 'btn btn-primary' 
      ]); 
      $buttons['delete'] = Html::a('Delete advert', ['delete', 'id' => $model->id], [ 
       'class' => 'btn btn-danger', 
       'data' => [ 
        'confirm' => 'Are you sure you want to delete this advert?', 
        'method' => 'post', 
       ], 
      ]); 

      if (isset($_POST['delete_pic'])) { 
       $model->deletePic(); 
      } 

      $gallery = '_my-gallery'; 
     } 
    } 

    $views->countViews($_GET['id']); 

    return $this->render('view', [ 
     'model' => $model, 
     'contacts' =>$contacts, 
     'contact' =>$contact, 
     'value' => $value, 
     'buttons' => $buttons, 
     'pictures' => $pictures, 
     'gallery' => $gallery, 
     'upload' => $upload, 
     'views' => $views, 
    ]); 
} 

Und hier ist meine Ansicht Code:

<div class="date-update"> 
    Last update: <?= date(Yii::$app->params['dateFormat'], $model->updated_at) ?> 
</div> 

<?= $this->render($gallery, [ 
    'pictures' => $pictures, 
    'model' => $model, 
    'upload' => $upload, 
]) ?> 

Ist es richtig

$pictures = new Pictures(); 

und

$upload = new UploadForm(); 
zu erstellen

im Controller und um sie für zwei Mal in die Ansichtsdatei zu übertragen, wo ich sie verwende oder ich sollte sie besser direkt in der Ansichtsdatei erstellen? Was wird nach OOP und MVC Prinzipien richtig sein?

+4

Dies ist eine Frage für [code review] (http://codereview.stackexchange.com) .. – dbf

Antwort

0

Warum möchten Sie sie in der Ansichtsdatei erstellen?

Die MVC-Logik soll nur Dinge in der View-Datei anzeigen. Sie sollten nie etwas anderes in den Ansichten tun.

Wenn Sie mit Ihrem Pictures-Objekt interagieren müssen, wie werden Sie es tun, wenn Sie das Objekt in der Ansicht erstellen?