Yii 2.x生成搜索功能
我记得在Yii的1.1时代,是自动生成搜索框,但是2.x年代怎么不自动了变成手动了,好在不是很麻烦了。下面就说怎么手动添加这个功能。
说手动不确切,因为很大一部分还是自动生成,
1. 访问Gii
http://localhost/gii
或者
http://localhost/index.php?r=gii
选择CRUD功能块
2. 生成search model
注意如果Search Model Class留空,那么Gii不会生成search的form,而这个form将是我们后面手动添加search功能必须的代码,因此要填写名字,名字是相对于Yii工程根目录的绝对路径,这里的app代表就是根路径。然后预览生成的文件。
上面的文件中有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页面是不是,有了搜索功能了。
版权所有,禁止转载. 如需转载,请先征得博主的同意,并且表明文章转载自:IT夜班车,否则按侵权处理 .