如何在 Yii2 中创建自己的 yii\bootstrap4\Html\dropDownList 类似物,以便以与通常的 echo Html::dropDownList() 相同的方式调用它?那大概是有必要重写为那个类吧?请告诉我。
Monitorkin's questions
有:Yii2 + MongoDb 和两个集合:StorageItems(货物)和 Storage(仓库):
我通过“存储”连接中的 storage_id 在 GridView 中显示来自 StorageItems + [b]name[/b] 仓库的字段。出现排序 [b]name[/b] 字段的链接,但实际上按名称字段排序不起作用。错误在哪里?我求你帮忙!(我翻遍了我能找到的所有东西,并尝试了所有能找到的选项......它没有帮助......)
存储物品:
class StorageItems extends ActiveRecord {
public function attributes() {
return [
'_id',
'item_id',
'storage_id',
'qty',...
];
}
public function rules() {
return [
[['item_id', 'storage_id'], 'filter', 'filter' => function ($value) {
return new ObjectId($value);
}],
[['qty'], 'integer'],
[['_id'], 'safe'],
];
public function getStorage() {
return $this->hasOne(Storage::className(), ['_id' => 'storage_id']);
}
}
存储物品搜索:
class StorageItemsSearch extends StorageItems {
public $storage;
public function attributes() {
return [
'_id',
'item_id',
'storage_id',
'qty',
'storage',
'items'
];
}
public function rules() {
return [
[['qty'], 'integer'],
[['storage_id', 'item_id', '_id', 'storage',' items'], 'safe'],
];
}
...
public function search($params) {
$query = StorageItems::find();
$query->with(['items', 'storage']);
$dataProvider = new ActiveDataProvider([
'query' => $query,
]);
$dataProvider->setSort([
'attributes' => [
'storage' => [
'asc' => [Storage::CollectionName().'name' => SORT_ASC],
'desc' => [Storage::CollectionName().'name' => SORT_DESC],
],
]
]);
$this->load($params);
if (!$this->validate()) {
return $dataProvider;
}
....
return $dataProvider;
}
看法:
...
<?=
GridView::widget([
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
'columns' => [
[
'attribute' => 'storage',
'value' => 'storage.name',
],
...
]
]);?>
文本形式的信息总是来自网站上的表单域,即使我在模型中指定
public function rules() {
return [
[['field'], 'integer'],
];
}
仅当您这样做时才会发生类型转换:
public function behaviors() {
'typecast' => [
'class' => AttributeTypecastBehavior::className(),
'attributeTypes' => [
'field' => AttributeTypecastBehavior::TYPE_INTEGER,
],
'typecastAfterValidate' => true,
'typecastBeforeSave' => false,
'typecastAfterFind' => false,
}
这是应该的还是我做错了什么?按照我的逻辑,通过在规则中指定类型,系统应该将字段转换为INTEGER类型,并保存在数据库中,但是不,它保存为文本!
您好,我想了解打扰 Mongo ObjectId 是否有意义。_id 字段是唯一的,在 MongoDb 集合中是必需的,可以是表示 BSON 对象的 ObjectId,也可以只是一个字符串。问题是关于使用这两种方法时的一般性能,哪一种更快?
您好,有一个具有自己属性的信息块,但其中一些不应显示在前端中,而应显示在管理面板中。怎么做?似乎不以标准方式工作?提前致谢。
我正在尝试制作一个计算器。有一组规则描述哪个变量应该是 <、>、=、!= 等到某个值,例如:
["sum",">","20"]
该表达式由用户编译,他在那里写的内容事先是未知的。也就是说,它可能会出现例如:
["sum",">","20"]
["sum","!=","30"]
["sum","=>","777"]
反过来,我需要使用这个数组并制定一个规则来查找值,例如:
if ($sum > 20){правило сработало, чтото делаем}
if ($sum != 30){правило сработало, чтото делаем}
if ($sum => 777){правило сработало, чтото делаем}
这实际上是一个解决方案吗?我没有经验:-)
有一个为 GridView 生成列的循环:
$columns = [];
foreach ($this->paramLabels() as $id => $label) {
$columns[] = [
'attribute' => "paramValues[{$id}]",
'filter' => Html::activeTextInput($this, "paramValues[{$id}]",['class' => 'form-control']),
'label' => $label,
'contentOptions'=>['data-param'=>"{$id}"],
'value' => "paramValues.{$id}.value",
];
}
更远:
GridView::widget([
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
'columns' => $columns,
]);
我不明白如何通过函数处理“值”,以便将值值包装在标签<div class="">...</div>
中
有一个包含表的 EAV 数据库: product - products (key: product_id); params - 产品参数(键:product_id、param_id); value - 产品参数值(key: param_id)
请告诉我如何在平面表格中显示一组产品参数,例如以下类型:
product_id | param_id1 | param_id2 | param_id3
1 | value1 | value2 | value3
2 | value1 | value2 | value3
3 | value1 | value2 | value3