yii2隐藏输入值
在Yii2中,我试图构造隐藏的输入yii2隐藏输入值,yii2,hidden-field,Yii2,Hidden Field,在Yii2中,我试图构造隐藏的输入 echo $form->field($model, 'hidden1')->hiddenInput()->label(false); 但我也需要它有一些有价值的选项,我怎么做呢?你可以用这些选项来做 echo $form->field($model, 'hidden1', ['options' => ['value'=> 'your value'] ])->hiddenInput()->l
echo $form->field($model, 'hidden1')->hiddenInput()->label(false);
但我也需要它有一些有价值的选项,我怎么做呢?你可以用这些选项来做
echo $form->field($model, 'hidden1',
['options' => ['value'=> 'your value'] ])->hiddenInput()->label(false);
在这里更改值没有意义,因为它是活动字段。这意味着该值将与模型值同步 只需更改
$model->hidden1的值即可更改它。或者在提交表单后从用户处收到数据后进行更改
使用非活动隐藏输入时,情况如下:
use yii\helpers\Html;
...
echo Html::hiddenInput('name', $value);
但后者更适合在模型之外使用。您也可以这样做
$model->hidden1 = 'your value';// better put it on controller
$form->field($model, 'hidden1')->hiddenInput()->label(false);
如果在控制器上设置值,这是一个更好的选项
$model = new SomeModelName();
if ($model->load(Yii::$app->request->post()) && $model->save()) {
return $this->redirect(['view', 'id' => $model->group_id]);
} else {
$model->hidden1 = 'your value';
return $this->render('create', [
'model' => $model,
]);
}
使用以下命令:
echo $form->field($model, 'hidden1')->hiddenInput(['value'=> $value])->label(false);
你可以写的很简单:
<?= $form->field($model, 'hidden1')->hiddenInput(['value'=>'abc value'])->label(false); ?>
我知道这是一篇老文章,但有时HTML也可以:
<input id="model-field" name="Model[field]" type="hidden" value="<?= $model->field ?>">
像这样:
<?= $form->field($model, 'hidden')->hiddenInput(['class' => 'form-control', 'maxlength' => true,])->label(false) ?>
或
使用此选项。您可以在视图(表单)中使用此代码行
请参考这个例子
如果您需要将当前日期和时间作为隐藏输入传递:
模型属性为“created_on”,其值为retrieve from date('Y-m-d H:i:s'),
就像:“2020-03-10 09:00:00”
你好,世界
你看,使用隐藏输入的主要问题是你想传递什么样的数据?
我将假定您正在尝试传递用户ID。
在这里传递它不是一个好主意,因为方法将生成输入
该值将显示给用户,因为我们无法在用户浏览器中隐藏html。如果你真的关心你的网站的安全性,这是非常重要的
请检查此链接,您将看到不可能向用户隐藏value属性以供查看
那怎么办呢?
看,这是PHP中OOP的核心。
我引用了Matt Zandstr在他伟大的著作PHP对象、模式和实践第五版中的话
不过,我仍然有很多不必要的灵活性。我依靠客户机编码人员更改ShopProduct对象的默认属性。这有两个问题。首先,正确初始化ShopProduct对象需要五行代码,没有编码人员会为此感谢您。其次,我无法确保在初始化ShopProduct对象时设置任何属性。我需要的是一个从类实例化对象时自动调用的方法
请检查一下这个使用_construct()方法的例子,他在书中也提到了这个方法。
你可以简单地做这个魔术。
这将产生以下结果:
在您的例子中,它与此类似,每次创建对象时,只需将用户ID传递给user_ID属性,并为自己节省大量编码。
祝你好运和快乐的编码!它只会更改字段容器HTML属性。看,这个答案对我有用。它根据问题使用ActiveForm方法field()
,另外还正确显示了如何在hiddenInput()方法中指定值;谢谢你,伙计,干得不错。这是给隐藏字段分配动态值的好方法之一。你在这里冒着html注入的风险。当框架方法存在时,使用它们,学习它们,信任它们。@HarryB你能解释一下HTML感染的风险吗。我看不出普通HTML有多不安全。@crafter内置的Yii方法将自动对字符串进行编码,然后再将其用作输入的值属性。上面的代码将把$model->field
包含的任何内容放入输入值中,而不首先对其进行编码。如果$model->field
包含>警报('hello!');
<?= $form->field($model, 'hidden_Input')->hiddenInput(['id'=>'hidden_Input','class'=>'form-control','value'=>$token_name])->label(false)?>
<input type="hidden" name="test" value="1" />
<?= $form->field($model, 'hidden1')->hiddenInput(['value'=>'your_value'])->label(false) ?>
<?= $form->field($model, 'created_on')->hiddenInput(['value'=>date('Y-m-d H:i:s')])->label(false) ?>
class ShopProduct {
public $title;
public $producerMainName;
public $producerFirstName;
public $price = 0;
public function __construct($title,$firstName,$mainName,$price) {
$this->title = $title;
$this->producerFirstName = $firstName;
$this->producerMainName = $mainName;
$this->price = $price;
}
}
$product1 = new ShopProduct("My Antonia","Willa","Cather",5.99 );
print "author: {$product1->getProducer()}\n";
author: Willa Cather
Class Car {
private $user_id;
//.. your properties
public function __construct($title,$firstName,$mainName,$price){
$this->user_id = \Yii::$app->user->id;
//..Your magic
}
}