оперирование видами из gii

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Уфф
Сообщения: 1
Зарегистрирован: 2018.02.14, 11:22

оперирование видами из gii

Сообщение Уфф » 2018.02.14, 11:38

Здравствуйте. только начал разбираться с фреймворком, но некоторые вопросы так и не смог прояснить в гугле.

Цель такая: я создал crud в gii, и получил стандартный код страницы

Код: Выделить всё

<?php

use yii\helpers\Html;
use yii\grid\GridView;
use yii\widgets\Pjax;
/* @var $this yii\web\View */
/* @var $searchModel app\models\PortSearch */
/* @var $dataProvider yii\data\ActiveDataProvider */

$this->title = 'Ports';
$this->params['breadcrumbs'][] = $this->title;

?>
<div class="port-index">

    <h1><?= Html::encode($this->title) ?></h1>
    <?php Pjax::begin(); ?>
    <?php // echo $this->render('_search', ['model' => $searchModel]); ?>

    <p>
        <?= Html::a('Create Port', ['create','node_id'=> @$_REQUEST['node_id']], ['class' => 'btn btn-success']); ?>
    </p>

    <?= GridView::widget([
        'dataProvider' => $dataProvider,
        'filterModel' => $searchModel,
        'columns' => [
            ['class' => 'yii\grid\SerialColumn'],

            'id',
            'node_id',
            'olt',

            ['class' => 'yii\grid\ActionColumn'],
        ],
    ]); ?>
    <?php Pjax::end(); ?>
</div>
ничего особенного, как теперь мне поступить если я хочу перенести эту таблицу на другую страницу? там ведь не будет переменных $dataProvider, $searchModel и я не понял пока как они задаются

Пришлось самому их переопределять и городить код для формирования параметров

Код: Выделить всё

    Pjax::begin(); 
	$srch = Yii::$app->request->queryParams;
	$srchm = [];
	$query = Port::find();
	if(isset($srch['PortSearch'])) foreach ($srch['PortSearch'] as $k=>$p) if(!empty($p)) {$query->andWhere(['like', $k, $p]); $srchm[$k] = $p; };
	$dataProvider = new ActiveDataProvider(['query' => $query, 'pagination' => ['pageSize' => 10, ],]);
	$searchModel = new PortSearch( $srchm );
    echo GridView::widget([
но мне бы и стандартные подошли, как их использовать?

А вообще цель вставить эту таблицу в модальное окно, которое находится в форме редактирования записи от другой таблицы, и там пользователь может выбрать с какой строкой из вылетевшей таблицы связать свою

пока весь код выглядит так

Код: Выделить всё

use yii\bootstrap\Modal;
use yii\grid\GridView;
use yii\widgets\Pjax;

use yii\data\ActiveDataProvider;
use app\models\Port;
use app\models\PortSearch;

	Modal::begin([
	'header' => '<h4>Порты</h4>',
	'footer' => 'Найдите нужную строку и нажмите кнопку Выбрать',
	//'closeButton' => false,
	'id' => 'choose_port',
	'size' => 'modal-lg',
	]);
    Pjax::begin(); 
	$srch = Yii::$app->request->queryParams;
	$srchm = [];
	$query = Port::find();
	if(isset($srch['PortSearch'])) foreach ($srch['PortSearch'] as $k=>$p) if(!empty($p)) {$query->andWhere(['like', $k, $p]); $srchm[$k] = $p; };
	$dataProvider = new ActiveDataProvider(['query' => $query, 'pagination' => ['pageSize' => 10, ],]);
	$searchModel = new PortSearch( $srchm );
    echo GridView::widget([
        'dataProvider' => $dataProvider,
        'filterModel' => $searchModel,
        'columns' => [
            ['class' => 'yii\grid\SerialColumn'],
            'id',
            'olt',
            'node_id',
			'node.pon',
			'node.place',
			'node.ip',
			[
			'label'=>'выбор',
			'value' => function ($data) { return '<button class="btn btn-success btn-xs" onclick="$(\'#choose_port\').modal(\'toggle\');$(\'#abon-port_id\').val(\''.($data->id).'\');">ok</button>'; },
			'format' => 'raw'
			],
        ],
    ]);
    Pjax::end();
	Modal::end();
но понимаю что это жуткий костылизм, еще видел у объекта modal есть функция set view, т.е. я могу создать отдельный вид этой страничке для отображения в своем модальном окне. Жду советов. направьте на путь истинный.

Ответить