За последние 24 часа нас посетили 11492 программиста и 990 роботов. Сейчас ищут 135 программистов ...

Как наполнить выпадающий список из массива?

Тема в разделе "Yii", создана пользователем Kazzi, 19 май 2020.

Метки:
  1. Kazzi

    Kazzi Новичок

    С нами с:
    21 июн 2017
    Сообщения:
    30
    Симпатии:
    0
    Всем добра опять!

    Есть массив в котором подгружаются с базы данных категории и их id.

    Во вьюхе есть форма, в одно из полей которой надо выгрузить из массива эти данные... Но я не пойму, как это сделать:( пытался вывести используя foreach:
    PHP:
    1. <div class="products-form">
    2.  
    3.     <?php $form = ActiveForm::begin(); ?>
    4.  
    5.     <?= $form->field($model, 'name')->textInput(['maxlength' => true]) ?>
    6.  
    7.     <?= $form->field($model, 'img_arr')->textarea(['rows' => 6]) ?>
    8.  
    9.     <?= $form->field($model, 'cat_id')->dropDownList([
    10.         foreach($category as $cat){
    11.             $cat['id'] => $cat['name'],
    12.         }
    13.     ]); ?>
    14.  
    15.     <?= $form->field($model, 'price1')->textInput() ?>
    16.  
    17.     <?= $form->field($model, 'price2')->textInput() ?>
    18.  
    19.     <?= $form->field($model, 'price3')->textInput() ?>
    20.  
    21.     <?= $form->field($model, 'price4')->textInput() ?>
    22.  
    23.     <?= $form->field($model, 'price5')->textInput() ?>
    24.  
    25.     <?= $form->field($model, 'description')->textarea(['rows' => 6]) ?>
    26.  
    27.     <div class="form-group">
    28.         <?= Html::submitButton('Сохранить', ['class' => 'btn btn-success']) ?>
    29.     </div>
    30.  
    31.     <?php ActiveForm::end(); ?>
    32.  
    33. </div>
    Но сам понимаю, что получается какой-то бред, и естественно ни чего не работает( Пожалуйста подскажите, как это реализовать((
     
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.184
    Симпатии:
    1.198
    Адрес:
    Лень
  3. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.154
    Симпатии:
    1.644
    Вот как людям такие идеи в голову приходят?

    dropDownList уже принимает массив, ассоциативный. Ключи будут выведены, как свойства value тега option, а значения будут помещены внутри тега. А чтоб быстро приводить в такой формат модели или массивы объектов, предусмотрена функция https://www.yiiframework.com/doc/api/2.0/yii-helpers-basearrayhelper#map()-detail

    @MouseZver array_column тут ни при чём.
     
    Kazzi нравится это.
  4. Kazzi

    Kazzi Новичок

    С нами с:
    21 июн 2017
    Сообщения:
    30
    Симпатии:
    0
    Спасибо большое, но у меня все на много хуже. Я вдруг понял, что данные из таблицы не передаются. Я ни черта не могу разобрать, что там нагенеривало gii.(((((( Я вроде бы указываю в контроллере товаров неймспейс моделей категорий:
    PHP:
    1. use app\models\Category;
    Потом в акшоне index формирую массив, и пытаюсь его рендером отправить во вьюху:

    PHP:
    1. public function actionIndex()
    2.     {
    3.         $searchModel = new ProductsSearch();
    4.         $dataProvider = $searchModel->search(Yii::$app->request->queryParams);
    5.         $category = Category::find()->asArray()->all();
    6.  
    7.         return $this->render('index', [
    8.             'searchModel' => $searchModel,
    9.             'dataProvider' => $dataProvider,
    10.         ], compact('category'));
    11.     }
    Потом пытаюсь хотя бы просто вывести его через print_r во воьюхе:

    PHP:
    1. <pre>
    2.     <? print_r($category); ?>
    3. </pre>
    Ни чего не получается(((( Ни чего не выводится. Что не так?( Подскажите пожалуйста( Может отправляю не правильно? Я недавно совсем начал осваивать yii, и очень плаваю еще в нем(
     
    #4 Kazzi, 19 май 2020
    Последнее редактирование: 19 май 2020
  5. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.184
    Симпатии:
    1.198
    Адрес:
    Лень
  6. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.154
    Симпатии:
    1.644
    @MouseZver ОК, поймал :) Признаю :)
    --- Добавлено ---
    Извини, может вопрос грубый, но читать умеешь? Где, в какой документации ты у render нашёл третий параметр? У render их только два. Если тебе очень нравится compact, значит надо делать array_merge, ну или не полениться, и в массиве написать 'category' => $category. А вообще, такое впечатление, что фреймворк тебе рано. Не чувствуется знаний языка от слова совсем.
     
  7. Kazzi

    Kazzi Новичок

    С нами с:
    21 июн 2017
    Сообщения:
    30
    Симпатии:
    0
    Я и так пытался передать. Тоже нет результата. На счет параметров рендера понял. Учту.
    --- Добавлено ---
    Вот неймспейс:
    PHP:
    1. use Yii;
    2. use app\models\Products;
    3. use app\models\ProductsSearch;
    4. use app\models\Category;
    5. use yii\web\Controller;
    6. use yii\web\NotFoundHttpException;
    7. use yii\filters\VerbFilter;
    Вот акшон:

    PHP:
    1. public function actionIndex()
    2.     {
    3.         $searchModel = new ProductsSearch();
    4.         $dataProvider = $searchModel->search(Yii::$app->request->queryParams);
    5.         $category = Category::find()->asArray()->all();
    6.  
    7.         return $this->render('index', [
    8.             'searchModel' => $searchModel,
    9.             'dataProvider' => $dataProvider,
    10.             'category' => $category,
    11.         ]);
    12.     }
    Вот, что вставлю во вьюху:

    PHP:
    1. <pre>
    2.            
    3.        <? print_r($category); ?>
    4.          
    5. </pre>
    Ни чего не происходит.... Вообще. Ни ошибок, ни чего...
     
  8. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.154
    Симпатии:
    1.644
    Ну это уже смотреть надо в целом, на таблицы и всё остальное. Показанная часть кода выглядит похоже на правду
     
  9. Kazzi

    Kazzi Новичок

    С нами с:
    21 июн 2017
    Сообщения:
    30
    Симпатии:
    0
    Я спокойно вывожу данные с этой таблицы во вьюхах, которые сделал сам. Этот контроллер, и вьюху сгенерировал gii. Таблица категорий простая. Там всего два поля, id и name. Все. Выгружаю из нее везде, нет ни где проблем. Но вот когда решил подправить форму, которую сгенерировал gii, чтобы выбирать категорию товаров из выпадающего списка, а не просто в инпут текстовый ее ручками вводить, запоролся тупо на выгрузке данных из таблицы(

    Контроллер:
    PHP:
    1. <?php
    2.  
    3. namespace app\controllers;
    4.  
    5. use Yii;
    6. use app\models\Products;
    7. use app\models\ProductsSearch;
    8. use app\models\Category;
    9. use yii\web\Controller;
    10. use yii\web\NotFoundHttpException;
    11. use yii\filters\VerbFilter;
    12.  
    13. /**
    14. * ProductsController implements the CRUD actions for Products model.
    15. */
    16. class ProductsController extends Controller
    17. {
    18.     /**
    19.      * {@inheritdoc}
    20.      */
    21.     public function behaviors()
    22.     {
    23.         return [
    24.             'verbs' => [
    25.                 'class' => VerbFilter::className(),
    26.                 'actions' => [
    27.                     'delete' => ['POST'],
    28.                 ],
    29.             ],
    30.         ];
    31.     }
    32.  
    33.     /**
    34.      * Lists all Products models.
    35.      * @return mixed
    36.      */
    37.     public function actionIndex()
    38.     {
    39.         $searchModel = new ProductsSearch();
    40.         $dataProvider = $searchModel->search(Yii::$app->request->queryParams);
    41.         $category = Category::find()->asArray()->all();
    42.  
    43.         return $this->render('index', [
    44.             'searchModel' => $searchModel,
    45.             'dataProvider' => $dataProvider,
    46.             'category' => $category,
    47.         ]);
    48.     }
    49.  
    50.     /**
    51.      * Displays a single Products model.
    52.      * @param integer $id
    53.      * @return mixed
    54.      * @throws NotFoundHttpException if the model cannot be found
    55.      */
    56.     public function actionView($id)
    57.     {
    58.         return $this->render('view', [
    59.             'model' => $this->findModel($id),
    60.         ]);
    61.     }
    62.  
    63.     /**
    64.      * Creates a new Products model.
    65.      * If creation is successful, the browser will be redirected to the 'view' page.
    66.      * @return mixed
    67.      */
    68.     public function actionCreate()
    69.     {
    70.         $model = new Products();
    71.  
    72.         if ($model->load(Yii::$app->request->post()) && $model->save()) {
    73.             return $this->redirect(['view', 'id' => $model->id]);
    74.         }
    75.  
    76.         return $this->render('create', [
    77.             'model' => $model,
    78.         ]);
    79.     }
    80.  
    81.     /**
    82.      * Updates an existing Products model.
    83.      * If update is successful, the browser will be redirected to the 'view' page.
    84.      * @param integer $id
    85.      * @return mixed
    86.      * @throws NotFoundHttpException if the model cannot be found
    87.      */
    88.     public function actionUpdate($id)
    89.     {
    90.         $model = $this->findModel($id);
    91.  
    92.         if ($model->load(Yii::$app->request->post()) && $model->save()) {
    93.             return $this->redirect(['view', 'id' => $model->id]);
    94.         }
    95.  
    96.         return $this->render('update', [
    97.             'model' => $model,
    98.         ]);
    99.     }
    100.  
    101.     /**
    102.      * Deletes an existing Products model.
    103.      * If deletion is successful, the browser will be redirected to the 'index' page.
    104.      * @param integer $id
    105.      * @return mixed
    106.      * @throws NotFoundHttpException if the model cannot be found
    107.      */
    108.     public function actionDelete($id)
    109.     {
    110.         $this->findModel($id)->delete();
    111.  
    112.         return $this->redirect(['index']);
    113.     }
    114.  
    115.     /**
    116.      * Finds the Products model based on its primary key value.
    117.      * If the model is not found, a 404 HTTP exception will be thrown.
    118.      * @param integer $id
    119.      * @return Products the loaded model
    120.      * @throws NotFoundHttpException if the model cannot be found
    121.      */
    122.     protected function findModel($id)
    123.     {
    124.         if (($model = Products::findOne($id)) !== null) {
    125.             return $model;
    126.         }
    127.  
    128.         throw new NotFoundHttpException('The requested page does not exist.');
    129.     }
    130. }
    Вьюха index (я знаю, что таблица не тут, просто хотя бы сюда вывести):
    PHP:
    1. <?php
    2.  
    3. use yii\helpers\Html;
    4. use yii\bootstrap4\Nav;
    5. use yii\grid\GridView;
    6.  
    7. /* @var $this yii\web\View */
    8. /* @var $dataProvider yii\data\ActiveDataProvider */
    9.  
    10. $this->title = 'Категории';
    11. $this->params['breadcrumbs'][] = $this->title;
    12. ?>
    13.  
    14.  
    15.  
    16. <div class="container-fluid block">
    17.     <div class="row">
    18.             <div class="col-lg-12">
    19.  
    20.             <?= Nav::widget([
    21.                 'items' => [
    22.                     /*[
    23.                         'label' => 'Пользователи',
    24.                         'url' => ['user/index'],
    25.                     ],*/
    26.                     [
    27.                         'label' => 'Товары',
    28.                         'url' => ['products/index'],
    29.                     ],
    30.                     [
    31.                         'label' => 'Категории',
    32.                         'url' => ['category/index'],
    33.                     ],
    34.                 ],
    35.                 'options' => ['class' =>'nav'], // set this to nav-tab to get tab-styled navigation
    36.             ]);?>
    37.  
    38.         </div>
    39.  
    40.         <div class="col-lg-12">
    41.          
    42.             <pre>
    43.          
    44.                 <? print_r($category); ?>
    45.          
    46.             </pre>
    47.  
    48.             <h1><?= Html::encode($this->title) ?></h1>
    49.  
    50.             <p>
    51.                 <?= Html::a('Создать категорию', ['create'], ['class' => 'btn btn-success']) ?>
    52.             </p>
    53.  
    54.  
    55.             <?= GridView::widget([
    56.                 'dataProvider' => $dataProvider,
    57.                 'columns' => [
    58.                     ['class' => 'yii\grid\SerialColumn'],
    59.  
    60.                     'id',
    61.                     'name',
    62.  
    63.                     [
    64.                         'class' => 'yii\grid\ActionColumn',
    65.                         'template' => '{view} {update} {delete}',
    66.                         'buttons' => [
    67.                             'view' => function ($url, $model) {
    68.                                 return Html::a('<i class="far fa-eye"></i>', $url, [
    69.                                     'title' => 'View',
    70.                                 ]);
    71.                             },
    72.                             'update' => function ($url, $model) {
    73.                                 return Html::a('<i class="fas fa-marker"></i>', $url, [
    74.                                     'title' => 'Update',
    75.                                 ]);
    76.                             },
    77.                             'delete' => function ($url, $model) {
    78.                                 return Html::a('<i class="fas fa-trash-alt"></i>', $url, [
    79.                                     'title' => 'Delete',
    80.                                     'data' => [
    81.                                         'method' => 'post',
    82.                                         'confirm' =>'Вы уверены, что хотите удалить этот товар?',
    83.                                     ]
    84.                                 ]);
    85.                             },
    86.                         ],
    87.                     ],
    88.                 ],
    89.             ]); ?>
    90.  
    91.         </div>
    92.     </div>
    93. </div>