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

在Yii2中,我试图构造隐藏的输入

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

   }
}