如何在gii

时间:2016-11-16 08:55:54

标签: php yii yii2

我没有在gii中使用CRUD生成器,但想在我的gridview中进行视图操作(在CRUD中读取)我在数据库中有2个模型和2个活动记录。在我的控制器中,我有使用sqlDataProvider和inner的动作,我使用join来从我的表中产生依赖,因为我不知道另一种方式。 我如何处理来自gridview项目的点击?我想在新视图中看到这个项目,只是其中之一。我怎样才能做到这一点?或者也许我可以从我的表中依赖并使用CRUD生成器,这是一种更简单的方法吗? 控制器动作:

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]);
        }
    }

现在当我点击项目时,我有这样的网址:

http://localhost/test/basic/site/0 我创建了动作来播放该网址,但我不知道该怎么做,现在它只是复制索引动作:

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']);
    }

1 个答案:

答案 0 :(得分: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;
                  }
              }           

          ],
      ],

      ]); 
  ?>