Yii2 dropDownList


        Bu yazımda formlara nasıl dropDownList ekleneceğinden bahsedip küçük bir örnek göstermeyi planlıyorum. Bunun için bir view'da birden fazla model göstermeyi öğrenmiş olmak gerekir.
  • Bir veritabanı var ve bu veritabanının dört adet tablosu olduğunu düşünelim. 
    • users: id, name, age, telephone_number,
    • games: id, name,
    • roles: id, name,
    • users_to_roles: id, user_id, game_id, role_id.
  • Bu veritabanı kullanıcılar, oynadıkları oyunlar, roller ve kullanıcılar için oyun ve rolü belirten tablosundan oluşsun. Biz de kullanıcı için oyun ve rol seçebileceğimiz bir view hazırlayalım ve bunu hazırlarken dropDownListlerden faydalanalım.
  • dropDownList'i kullanacağımız View dosyasıyla uğraşmadan önce bu dosyada kullanılacak olan modeller controller'daki ilgili action'da oluşturulması ve render edilmesi gerekir.
    public function actionName($id){

        $users = $this->findModel($id);

        $query = UsersToRoles::findByUserId($id);
        $roles = $query->all();
        $userToRoles = new UsersToRoles(['scenario' => 'create']);
        $userToRoles->user_id = $id;

        $games = \app\models\Games::find()->all();
        $roles = \app\models\Roles::find()->all();

        return $this->render('updatepanrol', [
            'users' => $users,
            'games' => $games,
            'roles' => $roles,
            'userToRoles' => $userToRoles
        ]);
    }
  • Daha sonra view'daki forma dropDownList öğelerini ekliyoruz:
    <?php
        $gameMap = ArrayHelper::map($games,'id', 'name');
        echo $form->field($userToRoles, 'game_id')->dropDownList($gameMap,
            ['prompt'=>'Choose a Game'],
            ['game_id'=>'name']
        );
        $roleMap = ArrayHelper::map($roles,'id', 'name');
        echo $form->field($userToRoles, 'role_id')->dropDownList($roleMap,
            ['prompt'=>'Choose a Role'],
            ['role_id'=>'name']
        );
    ?>

        Her şey yolunda gitmişse bir view'da birden fazla model kullanarak dropDownList öğelerini eklemiş olduk. Bir sonraki yazıda görüşmek üzere, iyi çalışmalar diliyorum.