我没有在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']);
}
答案 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;
}
}
],
],
]);
?>