Posts Tagged with "yii2"

既に発行済みのブログであっても適宜修正・追加することがあります。
We may make changes and additions to blogs already published.
posted by sakurai on November 15, 2022 #551

editアクションのビューの修正

続いて鉛筆マークのクリックで表示されるビューである_form.phpを修正します。これはcreateアクションのビューも兼用しています。まず標準の実行結果は図551.1のとおりです。

図%%.1
図551.1 yii2標準のActiveFormによる表示

同じく_form.phpを修正します。自動生成されたコードを見ると、

    <?= $form->field($model'category_id')->textInput() ?>

となっています。このcategory_idを、同様に(リレーション名).(メンバ名)としてみましたが、そう単純には行きませんでした。

単に表示を変えるのではなく、リストから選択する必要があるためです。そのためdropDownListウィジェットを用います。dropDownListが連想配列を必要とするので、categoryモデルが必要ですが、まず必要なモデルやヘルパーライブラリの使用を宣言します。

use yii\helpers\ArrayHelper;
use 
app\models\Category;

categoryモデルを全て配列に入れたあと、arrayHelperという便利な配列操作関数のうちのmap関数を用いて、dropDownListに必要な連想配列を作成します。

    <?= $form->field($model'category_id')->dropDownList(ArrayHelper::map(Category::find()->asArray()->all(), 'id''name')) ?>

これを実行した結果を図551.2に示します。

図%%.2
図551.2 修正したActiveFormによる表示

これでyii2のビューの修正は全て完了です。


左矢前のブログ 次のブログ右矢

posted by sakurai on November 14, 2022 #550

アクションviewのビューの修正

続いて目玉アイコンをクリックした時のビューであるview.phpを修正します。実行結果は図550.1のとおりです。

図%%.1
図550.1 yii2標準のDetailViewによる表示

以下にview.phpのDtailViewの修正法を示します。自動生成されたコードを見ると、

    <?= DetailView::widget([
        
'model' => $model,
        
'attributes' => [
            
'id',
            
'title',
            
'pages',
            
'link',
            
'category_id',
        ],
    ]) 
?>

同様に修正します。

    <?= DetailView::widget([
        
'model' => $model,
        
'attributes' => [
            
'id',
            
'title',
            
'pages',
            
'link',
            
'category.name',
        ],
    ]) 
?>

これを実行した結果を図550.2に示します。

図%%.2
図550.2 修正したDetailViewによる表示
タイトル列がNameですが、これもCategoryに変更したい場合は、'category.name:text:Category'のように修正します。

左矢前のブログ 次のブログ右矢

posted by sakurai on November 11, 2022 #549

アクションindexのビューの修正

index.php/?r=docsとしてドキュメント一覧表を表示します。表549.1に示すように、index.phpにより実行されます。

図%%.1
図549.1 yii2標準のGridViewによる表示

yii2も標準ではリレーション先まで見てくれないため、手修正を行います。前稿のように、views/docs/index.phpの修正法を示します。自動生成されたindex.phpを見ると、

    <?= GridView::widget([
        
'dataProvider' => $dataProvider,
        
'filterModel' => $searchModel,
        
'columns' => [
            [
'class' => 'yiigridSerialColumn'],
            
'id',
            
'title',
            
'pages',
            
'link',
            
'category_id',

これをyii2のGridViewのcolumnsにおいて、(リレーション名).(メンバ名)でリレーション先を表示できるとあるように修正します。

    <?= GridView::widget([
        
'dataProvider' => $dataProvider,
        
'filterModel' => $searchModel,
        
'columns' => [
            [
'class' => 'yiigridSerialColumn'],
            
'id',
            
'title',
            
'pages',
            
'link',
            
'category.name',

これを実行した結果を図549.2に示します。数字ではなく、カテゴリ名が表示されています。

図%%.2
図549.2 修正したGridViewによる表示

タイトル行がNameですが、Categoryに変更したい場合は、’category.name:text:Category'のように修正します。


左矢前のブログ 次のブログ右矢

posted by sakurai on November 9, 2022 #548

yii2によるスキャフォールディング

次にyii2でも同様な作業を行います。yii2のインストール法はcomposerを用います。yii2決定版ガイドのyiiインストール法にあるとおり、以下のコマンドによりbasic applicationを作成します。アプリ名をここではdoctest21としました。同じく太字が入力部分です。

$ composer create-project --prefer-dist yiisoft/yii2-app-basic doctest21

yiiと同様に、適宜config/web.php及びconfig/db.phpを修正して、アプリURI/?r=giiを実行し、giiによりモデルとCRUDを生成します。

まず、giiを有効化します。修正するファイルは、config/web.phpです。

    $config['bootstrap'][] = 'gii';
    
$config['modules']['gii'] = [
        
'class' => 'yiigiiModule',
        
// uncomment the following to add your IP if you are not connecting from localhost.
        
'allowedIPs' => ['127.0.0.1'],
    ];

次にconfig/db.phpを修正し、mysqlを使用することを宣言します。

return [
    
'class' => 'yiidbConnection',
    
'dsn' => 'mysql:host=localhost;dbname=test1',
    
'username' => 'root',
    
'password' => 'XXXXXXXX',
    
'charset' => 'utf8',

アクションとビューの対応表

表548.1に画面、コントローラ中のアクション、ビューの対応表を示します。これに従い、それぞれのアクション及びビューを修正します。コントローラはcontrollers/DocsController.phpであり、docs関連ビューは全て、views/docs/の下にあります。

表548.1 画面、アクション、ビューの対応表
アイコン コントローラ内
メソッド(アクション)
1次ビューファイル
(黄色がアクションに対応)
2次ビューファイル
一覧表示 actionIndex() index.php 無し
fig548-1.png actionCreate() create.php _form.php
fig548-2.png actionView() view.php 無し
fig548-3.png actionUpdate() update.php _form.php


左矢前のブログ 次のブログ右矢