Yii 2.x生成搜索功能

Yii 2.x生成搜索功能

我记得在Yii的1.1时代,是自动生成搜索框,但是2.x年代怎么不自动了变成手动了,好在不是很麻烦了。下面就说怎么手动添加这个功能。

说手动不确切,因为很大一部分还是自动生成,

1. 访问Gii

http://localhost/gii

或者

http://localhost/index.php?r=gii

选择CRUD功能块

yii gii

2. 生成search model

yii gii crud

注意如果Search Model Class留空,那么Gii不会生成search的form,而这个form将是我们后面手动添加search功能必须的代码,因此要填写名字,名字是相对于Yii工程根目录的绝对路径,这里的app代表就是根路径。然后预览生成的文件。

yii gii crud after

上面的文件中有2个是跟search有关的,一个是models下面的DeviceSearch.php另外一个_search.php。点击generate生成代码,要保证 controllers, models,views这3个文件夹其他用户有可写权限。

接下来就是手动部分。

3. 手动更改controller部分

默认生成的index部分代码是这样

 37     public function actionIndex()
 38     {
 39         $dataProvider = new ActiveDataProvider([
 40             'query' => USERS::find(),
 41         ]);
 42
 43         return $this->render('index', [
 44             'dataProvider' => $dataProvider,
 45         ]);

接下来,我们修改位如下代码:

 37     public function actionIndex()
 38     {
 46         $searchModel = new
DeviceSearch();
 47         $dataProvider = $searchModel->search(Yii::$app->request->queryParams);
 48
 49         if (Yii::$app->request->isPjax) {
 50             return $this->renderPartial('index', [
 51                 'model' => $searchModel,
 52                 'dataProvider' => $dataProvider,
 53             ]);
 54         } else {
 55             return $this->render('index', [
 56                 'model' => $searchModel,
 57                 'dataProvider' => $dataProvider,
 58             ]);
 59         }
 60     }

把上面的model修改你自己的model名字,也就是绿色的部分

 

4. 手动修改view部分

默认生成的view的index的代码如下:
  1 <?php
  2
  3 use yii\helpers\Html;
  4 use yii\grid\GridView;
  5 use yii\widgets\Pjax;
  6 /* @var $this yii\web\View */
  7 /* @var $dataProvider yii\data\ActiveDataProvider */
  8     
  9 $this->title = 'Device';
 10 $this->params[‘breadcrumbs’][] = $this->title;
 11 ?>
 12 <div class="device-index">
 13
 14     <h1><?= Html::encode($this->title) ?></h1>
 15
 16     <p>
 17         <?= Html::a('Create Device', [‘create’], [‘class’ => ‘btn btn-success’]) ?>
 18     </p>
 20 <?php Pjax::begin(); ?>    <?= GridView::widget([
 21         'dataProvider' => $dataProvider,
 22         'columns' => [
 23        

修改上面的代码如下,其实就是添加了一行代码(绿色的行)

  1 <?php
  2
  3 use yii\helpers\Html;
  4 use yii\grid\GridView;
  5 use yii\widgets\Pjax;
  6 /* @var $this yii\web\View */
  7 /* @var $dataProvider yii\data\ActiveDataProvider */
  8     
  9 $this->title = 'Device';
 10 $this->params[‘breadcrumbs’][] = $this->title;
 11 ?>
 12 <div class="device-index">
 13
 14     <h1><?= Html::encode($this->title) ?></h1>
 15
 16     <p>
 17         <?= Html::a('Create Device', [‘create’], [‘class’ => ‘btn btn-success’]) ?>
 18     </p>
 19
<?= $this->render('_search', [‘model’ => $model]); ?>
 20 <?php Pjax::begin(); ?>    <?= GridView::widget([
 21         'dataProvider' => $dataProvider,
 22         'columns' => [
 23        

 

完成,现在可以访问index页面是不是,有了搜索功能了。

 

 

i

 

版权所有,禁止转载. 如需转载,请先征得博主的同意,并且表明文章转载自:IT夜班车,否则按侵权处理i.

    分享到:

留言

你的邮箱是保密的 必填的信息用*表示