-1

I want make textfield search in Yii2. Previously I've make crud without Gii on Yii2. How to do that without using Gii?

Code index.php in view

<?php
use yii\helpers\Html;
use app\models\Donaturs;
use yii\grid\GridView;
use app\models\DonaturSearch;
?>
<h1>Data Donatur</h1>



<?php if (Yii::$app->session->hasFlash('success', 'delete')): ?>
  <div class="alert alert-success alert-dismissable">
  <button aria-hidden="true" data-dismiss="alert" class="close" type="button">×</button>
  <h4><i class="icon fa fa-check"></i>Informasi!</h4>
  <?= Yii::$app->session->getFlash('success') ?>
  <?= Yii::$app->session->getFlash('delete') ?>
</div>
<?php endif; ?>

<?php if (Yii::$app->session->hasFlash('delete')): ?>
  <div class="alert alert-success alert-dismissable">
  <button aria-hidden="true" data-dismiss="alert" class="close" type="button">×</button>
  <h4><i class="icon fa fa-check"></i>Informasi!</h4>
  <?= Yii::$app->session->getFlash('delete') ?>
  </div>
<?php endif; ?>

<?php
echo Html::a('Tambah data', ['create'],['class'=>'btn btn-primary']);
echo "<p></p>";

echo "<table class='table table-bordered table-striped'>";
echo "<tr>";
echo "<th>Kode Donatur</th>";
echo "<th>Nama Donatur</th>";
echo "<th>Alamat</th>";
echo "<th>Telepon</th>";
echo "<th>Aksi</th>";
echo "</tr>";
foreach ($donatur as $donatur) {
    echo "<tr>";
    echo "<td>".$donatur->kode_donatur."</td>";
    echo "<td>".$donatur->nama_donatur."</td>";
    echo "<td>".$donatur->alamat."</td>";
    echo "<td>".$donatur->telepon."</td>";
    echo "<td>";
    echo Html::a('<i class="glyphicon glyphicon-pencil"></i>', ['update', 'kode_donatur'=>$donatur->kode_donatur]);
    echo "&nbsp";
    echo "&nbsp";
    echo "&nbsp";
    echo "&nbsp"; 
    echo Html::a('<i class="glyphicon glyphicon-trash"></i>', ['delete', 'kode_donatur'=>$donatur->kode_donatur],
        ['onclick'=>'return (confirm("Apakah data ingin dihapus ?")?true:false);']);
    echo "</td>";
    echo "</tr>";
}
echo "</table>";
// display pagination
echo \yii\widgets\LinkPager::widget(['pagination' => $pages,
    ]);

Code in controller

<?php

namespace app\controllers;

use Yii;
use yii\web\Controller;
use app\models\Donatur;

class DonaturController extends Controller
{
    public function actionCreate()
    {
        $model = new Donatur();
        if (Yii::$app->request->post()) {
            $model->load(Yii::$app->request->post());
            if ($model->save()) {
                \Yii::$app->session->setFlash('success', 'Data berhasil disimpan!');
            } else {
                Yii::$app->session->setFlash('error', 'Data gagal disimpan!');
            }
            return $this->redirect(['index']);
            return $this->refresh();

        }
        else {
            return $this->render('create', ['model' => $model]);    
        }
    }

    public function actionUpdate($kode_donatur)
    {
        $model = Donatur::findOne($kode_donatur);

        if (Yii::$app->request->post()) {
            $model->load(Yii::$app->request->post());
            if ($model->save()) {
                Yii::$app->session->setFlash('success', 'Data berhasil diupdate!');
            } else {
                Yii::$app->session->setFlash('error', 'Data gagal diupdate!');
            }
            return $this->redirect(['index']);
            return $this->refresh();
        }
        else {
            return $this->render('update', ['model' => $model]);
        }
    }

    public function actionDelete($kode_donatur)
    {
        $model = Donatur::findOne($kode_donatur);
        $model->delete();
        Yii::$app->session->setFlash('delete', 'Data berhasil dihapus!');
        return $this->redirect(['index']);
    }

    function actionIndex()
    {
        $query = Donatur::find();
        $countQuery = clone $query;
        $pages = new \yii\data\Pagination([
            'totalCount' => $countQuery->count(),
            'defaultPageSize' => 5,
            ]);
        $donatur = $query->offset($pages->offset)
            ->limit($pages->limit)
            ->all();

        return $this->render('index', [
            'donatur' => $donatur,
            'pages' => $pages,
            ]);    
    }

}

Code model

<?php

namespace app\models;

use yii\db\ActiveRecord;

class Donatur extends ActiveRecord
{
    public static function tableName()
    {
        return 'donatur';
    }

    public function rules()
    {
        return [
            [['kode_donatur', 'nama_donatur', 'alamat', 'telepon'], 'required'],
            [['kode_donatur', 'nama_donatur', 'alamat'], 'string'],
            [['telepon'], 'integer'],
            ];
    }

}

And the result is bellow picture enter image description here

And I want textfield search is bellow picture enter image description here

rob006
  • 18,710
  • 5
  • 41
  • 58
CrashBurn
  • 317
  • 1
  • 2
  • 17

2 Answers2

0
  1. create a custom model containing one search field
  2. in your view, use this model contained in ActiveForm to post input to your controller/action
  3. in your controller action, use the search value for your query
e-frank
  • 629
  • 9
  • 18
-1

Just put this line above your list view and keep the required fields which are you want to search.

echo $this->render('_search', ['model' => $searchModel]);
S. Gandhi
  • 68
  • 8