Всем добра опять! Есть массив в котором подгружаются с базы данных категории и их id. Во вьюхе есть форма, в одно из полей которой надо выгрузить из массива эти данные... Но я не пойму, как это сделать пытался вывести используя foreach: PHP: <div class="products-form"> <?php $form = ActiveForm::begin(); ?> <?= $form->field($model, 'name')->textInput(['maxlength' => true]) ?> <?= $form->field($model, 'img_arr')->textarea(['rows' => 6]) ?> <?= $form->field($model, 'cat_id')->dropDownList([ foreach($category as $cat){ $cat['id'] => $cat['name'], } ]); ?> <?= $form->field($model, 'price1')->textInput() ?> <?= $form->field($model, 'price2')->textInput() ?> <?= $form->field($model, 'price3')->textInput() ?> <?= $form->field($model, 'price4')->textInput() ?> <?= $form->field($model, 'price5')->textInput() ?> <?= $form->field($model, 'description')->textarea(['rows' => 6]) ?> <div class="form-group"> <?= Html::submitButton('Сохранить', ['class' => 'btn btn-success']) ?> </div> <?php ActiveForm::end(); ?> </div> Но сам понимаю, что получается какой-то бред, и естественно ни чего не работает( Пожалуйста подскажите, как это реализовать((
PHP: dropDownList ( array_column ( $category, 'id' ) ) https://www.php.net/manual/ru/function.array-column.php
Вот как людям такие идеи в голову приходят? dropDownList уже принимает массив, ассоциативный. Ключи будут выведены, как свойства value тега option, а значения будут помещены внутри тега. А чтоб быстро приводить в такой формат модели или массивы объектов, предусмотрена функция https://www.yiiframework.com/doc/api/2.0/yii-helpers-basearrayhelper#map()-detail @MouseZver array_column тут ни при чём.
Спасибо большое, но у меня все на много хуже. Я вдруг понял, что данные из таблицы не передаются. Я ни черта не могу разобрать, что там нагенеривало gii.(((((( Я вроде бы указываю в контроллере товаров неймспейс моделей категорий: PHP: use app\models\Category; Потом в акшоне index формирую массив, и пытаюсь его рендером отправить во вьюху: PHP: public function actionIndex() { $searchModel = new ProductsSearch(); $dataProvider = $searchModel->search(Yii::$app->request->queryParams); $category = Category::find()->asArray()->all(); return $this->render('index', [ 'searchModel' => $searchModel, 'dataProvider' => $dataProvider, ], compact('category')); } Потом пытаюсь хотя бы просто вывести его через print_r во воьюхе: PHP: <pre> <? print_r($category); ?> </pre> Ни чего не получается(((( Ни чего не выводится. Что не так?( Подскажите пожалуйста( Может отправляю не правильно? Я недавно совсем начал осваивать yii, и очень плаваю еще в нем(
@MouseZver ОК, поймал Признаю --- Добавлено --- Извини, может вопрос грубый, но читать умеешь? Где, в какой документации ты у render нашёл третий параметр? У render их только два. Если тебе очень нравится compact, значит надо делать array_merge, ну или не полениться, и в массиве написать 'category' => $category. А вообще, такое впечатление, что фреймворк тебе рано. Не чувствуется знаний языка от слова совсем.
Я и так пытался передать. Тоже нет результата. На счет параметров рендера понял. Учту. --- Добавлено --- Вот неймспейс: PHP: use Yii; use app\models\Products; use app\models\ProductsSearch; use app\models\Category; use yii\web\Controller; use yii\web\NotFoundHttpException; use yii\filters\VerbFilter; Вот акшон: PHP: public function actionIndex() { $searchModel = new ProductsSearch(); $dataProvider = $searchModel->search(Yii::$app->request->queryParams); $category = Category::find()->asArray()->all(); return $this->render('index', [ 'searchModel' => $searchModel, 'dataProvider' => $dataProvider, 'category' => $category, ]); } Вот, что вставлю во вьюху: PHP: <pre> <? print_r($category); ?> </pre> Ни чего не происходит.... Вообще. Ни ошибок, ни чего...
Ну это уже смотреть надо в целом, на таблицы и всё остальное. Показанная часть кода выглядит похоже на правду
Я спокойно вывожу данные с этой таблицы во вьюхах, которые сделал сам. Этот контроллер, и вьюху сгенерировал gii. Таблица категорий простая. Там всего два поля, id и name. Все. Выгружаю из нее везде, нет ни где проблем. Но вот когда решил подправить форму, которую сгенерировал gii, чтобы выбирать категорию товаров из выпадающего списка, а не просто в инпут текстовый ее ручками вводить, запоролся тупо на выгрузке данных из таблицы( Контроллер: PHP: <?php namespace app\controllers; use Yii; use app\models\Products; use app\models\ProductsSearch; use app\models\Category; use yii\web\Controller; use yii\web\NotFoundHttpException; use yii\filters\VerbFilter; /** * ProductsController implements the CRUD actions for Products model. */ class ProductsController extends Controller { /** * {@inheritdoc} */ public function behaviors() { return [ 'verbs' => [ 'class' => VerbFilter::className(), 'actions' => [ 'delete' => ['POST'], ], ], ]; } /** * Lists all Products models. * @return mixed */ public function actionIndex() { $searchModel = new ProductsSearch(); $dataProvider = $searchModel->search(Yii::$app->request->queryParams); $category = Category::find()->asArray()->all(); return $this->render('index', [ 'searchModel' => $searchModel, 'dataProvider' => $dataProvider, 'category' => $category, ]); } /** * Displays a single Products model. * @param integer $id * @return mixed * @throws NotFoundHttpException if the model cannot be found */ public function actionView($id) { return $this->render('view', [ 'model' => $this->findModel($id), ]); } /** * Creates a new Products model. * If creation is successful, the browser will be redirected to the 'view' page. * @return mixed */ public function actionCreate() { $model = new Products(); if ($model->load(Yii::$app->request->post()) && $model->save()) { return $this->redirect(['view', 'id' => $model->id]); } return $this->render('create', [ 'model' => $model, ]); } /** * Updates an existing Products model. * If update is successful, the browser will be redirected to the 'view' page. * @param integer $id * @return mixed * @throws NotFoundHttpException if the model cannot be found */ public function actionUpdate($id) { $model = $this->findModel($id); if ($model->load(Yii::$app->request->post()) && $model->save()) { return $this->redirect(['view', 'id' => $model->id]); } return $this->render('update', [ 'model' => $model, ]); } /** * Deletes an existing Products model. * If deletion is successful, the browser will be redirected to the 'index' page. * @param integer $id * @return mixed * @throws NotFoundHttpException if the model cannot be found */ public function actionDelete($id) { $this->findModel($id)->delete(); return $this->redirect(['index']); } /** * Finds the Products model based on its primary key value. * If the model is not found, a 404 HTTP exception will be thrown. * @param integer $id * @return Products the loaded model * @throws NotFoundHttpException if the model cannot be found */ protected function findModel($id) { if (($model = Products::findOne($id)) !== null) { return $model; } throw new NotFoundHttpException('The requested page does not exist.'); } } Вьюха index (я знаю, что таблица не тут, просто хотя бы сюда вывести): PHP: <?php use yii\helpers\Html; use yii\bootstrap4\Nav; use yii\grid\GridView; /* @var $this yii\web\View */ /* @var $dataProvider yii\data\ActiveDataProvider */ $this->title = 'Категории'; $this->params['breadcrumbs'][] = $this->title; ?> <div class="container-fluid block"> <div class="row"> <div class="col-lg-12"> <?= Nav::widget([ 'items' => [ /*[ 'label' => 'Пользователи', 'url' => ['user/index'], ],*/ [ 'label' => 'Товары', 'url' => ['products/index'], ], [ 'label' => 'Категории', 'url' => ['category/index'], ], ], 'options' => ['class' =>'nav'], // set this to nav-tab to get tab-styled navigation ]);?> </div> <div class="col-lg-12"> <pre> <? print_r($category); ?> </pre> <h1><?= Html::encode($this->title) ?></h1> <p> <?= Html::a('Создать категорию', ['create'], ['class' => 'btn btn-success']) ?> </p> <?= GridView::widget([ 'dataProvider' => $dataProvider, 'columns' => [ ['class' => 'yii\grid\SerialColumn'], 'id', 'name', [ 'class' => 'yii\grid\ActionColumn', 'template' => '{view} {update} {delete}', 'buttons' => [ 'view' => function ($url, $model) { return Html::a('<i class="far fa-eye"></i>', $url, [ 'title' => 'View', ]); }, 'update' => function ($url, $model) { return Html::a('<i class="fas fa-marker"></i>', $url, [ 'title' => 'Update', ]); }, 'delete' => function ($url, $model) { return Html::a('<i class="fas fa-trash-alt"></i>', $url, [ 'title' => 'Delete', 'data' => [ 'method' => 'post', 'confirm' =>'Вы уверены, что хотите удалить этот товар?', ] ]); }, ], ], ], ]); ?> </div> </div> </div>