【问题标题】:Laravel4: Form with image-pickerLaravel4:带有图像选择器的表单
【发布时间】:2013-11-23 04:10:26
【问题描述】:

在使用 Bootstrap + Laravel4 的网站中。 在表单中,有一些图像可供用户单击以选择它。 它是通过一个不错的 JQuery 插件完成的:http://rvera.github.io/image-picker/

现在它是用 html 编写的,并且正在运行:

            <label><span><i class="icon-check"></i></span> Click on a room to select it</label>
          <select name="rooms[]" multiple="multiple" class="image-picker show-html">
              <option value=""></option>
              <option name="1room" data-img-src="assets/img/rooms/singleRoom.jpg" value="Single room">Single room</option>
              <option name="2room" data-img-src="assets/img/rooms/2room.jpg" value="Double room">Double room</option>
          </select> 

我不需要在 Laravel4 中重写所有这些标记。 但我需要一件事:我必须添加到 Input::old('inputName') 以在验证错误的情况下保留这些值。 这是非常重要的。 我试过这样做: - 将单个选项的值设置为:{{ 'Single room', Input::old('1room') }} - 将选择的值设置为 {{ Input::old('rooms[]') }} 但他们都没有工作。 它没有给出错误,但不保留原始值。

有人知道我该怎么做吗?

非常感谢!

编辑:

在页面顶部打印出Input::old()的值,房间的值实际上是保留的:

array (size=8)
  'rooms' => 
  array (size=2)
  0 => string 'Single room' (length=11)
  1 => string 'Double room' (length=11)
 'arrival' => string '13/11/2013' (length=10)
 'outgoing' => string '11/11/2013' (length=10)
 'name' => string 'name' (length=4)
 'email' => string 'email' (length=5)
 'phone' => string '9999999999' (length=10)
 'message' => string 'gjhgjghj' (length=8)
 'submit' => string '' (length=0)

关键是如何在表单中显示它们。确切地说是如何根据该数组中包含的值选择一些图像。

EDIT2:

这是如何理解选择的哪些选项被选中,感谢@Samuraisoulification:

          <?php  
              if (isset(Input::old()['rooms']))
              {

               for($i = 0 , $input = Input::old()['rooms'] , $c = count($input) ; $i < $c ; $i++)
               {
                 if($input[$i] == "Single room")
                 {
                      echo "Single room selected";
                 }

                 if($input[$i] == "Double room")
                 {
                      echo "Double room selected";
                 }
               }
              }
          ?>

【问题讨论】:

  • 也许 JQuery 插件在发送数据时发生了一些变化?还有为什么是 rooms[] ?不仅仅是房间
  • 实际上不记得为什么有房间[] ..我用“房间”更改它并且html在任何情况下都有效。但无论如何 {{ Input::old('rooms') }} 不起作用
  • 尝试只输出 Input::old() 得到的内容。就像在页面顶部一样,尝试一下。你有什么收获吗?
  • 我认为验证包含它的内容是个好主意!但我该怎么做呢?我尝试在控制器中写这个: $old = Input::old(); dd($旧);但不起作用,它给出了一个空数组。并且 id 不正确,因为其他 input::old 已正确插入表单中,仅适用于不起作用的“房间”,因此它必须包含某些内容,是我没有正确检查 Input::old() .我怎样才能正确检查这个值?
  • 如果目前它不是一个实时站点,我会在页面顶部输入旧输入:{{ Input::old() }}
    看看会发生什么。

标签: jquery twitter-bootstrap jquery-plugins laravel laravel-4


【解决方案1】:

这是一个非常不雅的解决方案,但如果我是正确的应该可以工作。在选项标签中添加:

    <?php  
        for($i = 0 , $input = Input::old()['rooms'] , $c = count($input) ; $i < $c ; $i++){
           if($input[$i] == "<select option's name>"){
                echo "selected";
           }
         }
?>

请注意,$input 和 $c 不在比较部分中,因此它们只会被评估一次,从而为您以后可能拥有的所有选项节省少量时间(例如页面加载时间)。这是一个不优雅的解决方案,但由于您允许多个值,我认为这是唯一的方法。试一试,如果有问题,请告诉我!还要确保将此代码放在每个开始标记中!

另外我想说把这一切浓缩成一行看起来也会更好。

最后,我认为由于选项与输入不同,value=="{{Input::old}}" 不起作用,因为要选择它,您必须在上面说选择它。还请务必评论此 hack 以供将来参考。

【讨论】:

  • 感谢您的努力!逻辑是有效的,因为如果输入是“单人房间”,那么会回显“选择”,否则不会。现在的重点是如何选择一个特定的选项,不是吗?
  • 现在编辑问题,让我看看你编码了什么,输出是什么!
  • 我已经编辑了这个问题。如果选择了该选项,则输出是回显值。
  • 等待 if($input[$i] == "Single room") { echo "Single room selected"; } 你实际上回应了“选择单人房”而不是选择?
  • 是的,调试是的。当有“选择”时,它会回显“选择”。
猜你喜欢
  • 2021-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-24
  • 1970-01-01
相关资源
最近更新 更多