Как сделать так, чтобы в Index GridView отображался, только если что-нибудь найдено, т.е. в начале было только поля для поиска?
Файл views\prest\index.php
<?php
namespace app\models;
use Yii;
use yii\base\Model;
use yii\data\ActiveDataProvider;
use app\models\Prest;
/**
* PrestSearch represents the model behind the search form of `app\models\Prest`.
*/
class PrestSearch extends Prest
{
/**
* @inheritdoc
*/
public function rules()
{
return [
[['id'], 'integer'],
[['Lastname', 'Firstname', 'Middlename', 'Birthdate', 'NRD', 'RDdate', 'UC', 'Mera', 'Init', 'Cat', 'Date'], 'safe'],
];
}
/**
* @inheritdoc
*/
public function scenarios()
{
// bypass scenarios() implementation in the parent class
return Model::scenarios();
}
/**
* Creates data provider instance with search query applied
*
* @param array $params
*
* @return ActiveDataProvider
*/
public function search($params)
{
$query = Prest::find();
// add conditions that should always apply here
$dataProvider = new ActiveDataProvider([
'query' => $query,
]);
$this->load($params);
if (!$this->validate()) {
// uncomment the following line if you do not want to return any records when validation fails
$query->where('0=1');
return $dataProvider;
}
$query->andFilterWhere(['like', 'Lastname', $this->Lastname])
->andFilterWhere(['like', 'Firstname', $this->Firstname])
->andFilterWhere(['like', 'Middlename', $this->Middlename]);
return $dataProvider;
}
}
if (!$this->validate()) {
// uncomment the following line if you do not want to return any records when validation fails
$query->where('0=1');
return $dataProvider;
}
if($this->Lastname || $this->Firstname || $this->Middlename) {
$query->andFilterWhere(['like', 'Lastname', $this->Lastname])
->andFilterWhere(['like', 'Firstname', $this->Firstname])
->andFilterWhere(['like', 'Middlename', $this->Middlename]);
} else {
$query->where('0=1');
}
return $dataProvider;
Или сделать валидатор на эти поля, тогда сработает if (!$this->validate())
Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа. Роберт Шекли.
$this->load($params);
if (!$this->validate()) {
// uncomment the following line if you do not want to return any records when validation fails
$query->where('0=1');
return $dataProvider;
}
if (!$this->load($params) || !$this->validate()) {
// uncomment the following line if you do not want to return any records when validation fails
$query->where('0=1');
return $dataProvider;
}
Grid все равно присутствует, но с надписью "Ничего не найдено"
Как сделать так, чтоб при загрузке страницы, также при нажатии кнопки reset была только форма поиска без никакого грида (пустого и непустого)?
И чтоб грид выводился, только если были отправлены post параметры