2 つの機能を組み合わせて、コードを統合し、使用方法に応じて動的にしたいと考えています。これが可能かどうかはわかりません。
まず、基本的な使い方を整理しましょう。私の例では、Post および PostCategory モデル (および CRUD ビルド) があります。カテゴリを作成し、新しい投稿を作成してカテゴリに割り当てます。enabled
投稿には、またはになる能力がありますdisabled
。基本的に、いくつかの新しい投稿を作成し、準備ができるまでエンド ユーザーに表示されないようにすることができます。enabled
1 つのユースケースはドリップ フィード システムで、100 件の投稿を追加し、x 日ごとに 1 つの切り替えを行うことができます。それはこの範囲を超えています。
views\post\_form.php
<div class="post-form">
<?php $form = ActiveForm::begin(); ?>
<?= $form->field($model, 'category_id')->dropDownList(
$model->getPostCategoryConst(),
['prompt'=> '- Category -']
)->label('Category')
?>
<?= $form->field($model, 'name')->textInput(['maxlength' => true]) ?>
<?= $form->field($model, 'text')->textarea(['rows' => 6]) ?>
<?= $form->field($model, 'status')->dropDownList(
$model->getPostStatusConst(),
['prompt'=> '- Status -']
) ?>
<div class="form-group">
<?= Html::submitButton($model->isNewRecord ? 'Create' : 'Update', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>
</div>
<?php ActiveForm::end(); ?>
</div>
と のドロップダウン リストと、それらが呼び出す関数に注意してcategory_id
くださいstatus
。
\common\models\Post.php
const STATUS_ENABLED = 1;
const STATUS_DISABLED = 0;
public function getCategory()
{
return $this->hasOne(PostCategory::className(), ['id' => 'category_id']);
}
/* -- Added -- */
public function getPostCategoryConst()
{
return ArrayHelper::map(PostCategory::find()->orderBy('name DESC')->all(), 'id', 'name');
}
public function getPostStatusConst()
{
return [
self::STATUS_DISABLED => 'Disabled',
self::STATUS_ENABLED => 'Enabled',
];
}
これで問題なく動作します:)しかし、「ゲッター」との関係と同様にアクセスされないためget
、 as inを使用するのは好きではありません。getPostStatusConst()
$model->postStatusConst
ただし、これらを「ゲッター」としても使用したいと思います。インデックスとビューでは、同じ関数も呼び出すとよいでしょう。配列を返す代わりに、「Enabled」や「Disabled」などの「ナイスネーム」を返す
これ以上混乱させたくないので、関数の名前を変更しません。
ビュー\投稿\view.php
<?= DetailView::widget([
'model' => $model,
'attributes' => [
'id',
'category.name',
'name',
'text:ntext',
'postStatusConst', // <-- Calls getPostStatusConst()
'created_at:datetime',
'updated_at:datetime',
],
]) ?>
Noticeはcreate アクションpostStatusConst
で使用したのと同じ関数です。_form
_form では、ドロップダウン リストの配列を返す必要がありました。Enabled
私たちの見解では、またはなどの適切な名前を返す必要があるだけですDisabled
。
私は試した
Post モデルでこの関数を試しました:
public function getPostStatusConst()
{
if ( isset($this) ) {
return ($this->status === self::STATUS_ENABLED) ? 'Enabled' : 'Disabled';
}
return [
self::STATUS_DISABLED => 'Disabled',
self::STATUS_ENABLED => 'Enabled',
];
}
それは明らかにうまくいきませんでした:)私は$this
クラス内で自分自身を参照していることを知っているので、うまくいくとは思っていませんでした。それは私が何をしようとしているのかを示しているだけです。
リレーションでは、hasOne()
それを直接呼び出し (Post::getCategory) として使用しているのか、インライン ($model->category->name) として使用しているのかを知っているようです。
質問
同じことをすることは可能getPostStatusConst()
ですか?as を使用し$model->postStatusConst
て表示する、Enabled
または適切に表示するDisabled
、または asPost::getPostStatusConst()
をドロップダウンの配列を取得するために使用します。