2016-11-16 3 views
0

Я не использую генератор CRUD в gii, но хочу иметь действие вида в моем gridview (чтение в CRUD) У меня есть 2 модели и 2 активных записи для таблиц в моей базе данных. В моем контроллере у меня есть действие, которое использует sqlDataProvider и inner, которые я использую для создания зависимостей из моих таблиц, потому что я не знаю другого пути. Как я могу обработать щелчок по элементу gridview? Я хочу увидеть этот элемент в новом представлении, только один из них. Как я могу это сделать? Или, может быть, я могу сделать зависимость от своего стола и использовать CRUD-генератор, и это проще? Регулятор:Как вставить действие вида без CRUD в gii

public function actionIndex() 
    { 
     if(Yii::$app->user->isGuest) 
     { 
      return $this->redirect(['login']); 
     } 
     else 
     { 
     $dataProvider = new SqlDataProvider([ 
    'sql' => 'SELECT p.id,p.user_id,p.post_title,p.post_text,u.name ' . 
      'FROM Posts p '. 
      'INNER JOIN User u ' . 
      'ON p.user_id = u.id' 
]); 
     return $this->render('index',['dataProvider'=>$dataProvider]); 
     } 
    } 

и теперь, когда я нажимаю на пункт У меня есть URL так:

http://localhost/test/basic/site/0 и я создал действия для hadle, что URL, но я не знаю, что делать в нем, Теперь это просто скопировать индекс действия:

public function actionView($id) 
    { 
     if(Yii::$app->user->isGuest) 
     { 
      return $this->redirect(['login']); 
     } 
     else 
     { 
     $dataProvider = new SqlDataProvider([ 
    'sql' => 'SELECT p.id,p.user_id,p.post_title,p.post_text,u.name ' . 
      'FROM Posts p '. 
      'INNER JOIN User u ' . 
      'ON p.user_id = u.id' 
]); 
     return $this->render('index',['dataProvider'=>$dataProvider]); 
     } 
    } 

мой взгляд индекс:

<?php 
use yii\grid\GridView; 
?> 
<?= GridView::widget([ 
    'dataProvider' => $dataProvider, 
    'columns' => [ 
     'ID'=>'id', 
     'Title'=>'post_title', 
     'Text'=>'post_text', 
     'Author'=>'name', 
     [ 
      'class' => 'yii\grid\ActionColumn', 
      'header'=>'Действия', 
      'headerOptions' => ['width' => '80'], 
      'template' => '{view}', 
     ], 
    ], 
    'rowOptions' => function ($model, $key, $index, $grid) { 
return ['id' => $model['id']]; 
    }, 
]); ?> 

Я пытаюсь сделать зависимость (видел в другом действии), но не знаю, правильно это или сейчас. И что дальше, когда я это делаю.

public function getUser() 
    { 
     return $this->hasOne(User::classname(),['user_id'=>'id']); 
    } 

ответ

0

В GridView actioncolumn вы должны установить кнопки и urlCreator

<?= GridView::widget([ 
     'dataProvider' => $dataProvider, 
     'columns' => [ 
      'ID'=>'id', 
      'Title'=>'post_title', 
      'Text'=>'post_text', 
      'Author'=>'name', 
      [ 
       'class' => 'yii\grid\ActionColumn', 
       'header'=>'Действия', 
       'headerOptions' => ['width' => '80'], 
       'template' => '{view}', 
       'buttons' => [ 
        'scheda' => function ($url, $model) { 
         return Html::a('<span class="glyphicon glyphicon-eye-open"></span>', $url, [ 
         'title' => Yii::t('app', 'My View Title'), 
         ]); 
        } 
       ], 
       'urlCreator' => function ($action, $model, $key, $index) { 
        if ($action === 'view') { 
         $url = Url::to(['/my-controller-name/view', 'id' =>$model->id]); 
        return $url; 
        } 
       }   

      ], 
     ], 

     ]); 
    ?>