【问题标题】:Laravel check if Request has collectionLaravel 检查请求是否有集合
【发布时间】:2018-05-04 18:44:55
【问题描述】:

我想在我发布的每个请求上运行一个 if 语句,如果有的话是一个集合做一些不同的事情。

当我转储$request->all 时,我有一个看起来像这样的数组;

  "_token" => "MMRFBAgyThsIHzITzT26Qwdp4L6HDV0JTPGs6h"
  "page_name" => "Travel"
  "heading" => "Travel Europe"
  "textarea" => "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostru ▶"
  "seo_title" => "travel"
  "seo_description" => "travel"
  "attribute_1" => "Food"
  "attribute_2" => "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor."
  "attribute_3" => "Hotels"
  "attribute_6" => "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor."
  "attribute_5" => "Events"
  "attribute_4" => "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor."
  "attribute_7" => null
  "attribute_8" => null
  "attribute_9" => UploadedFile {#233 ▶}

数据会有所不同,所以我不能写任何静态的东西,例如$request->input('attribute_9')

这就是我目前处理未知请求属性的方式。

$input = $request->all();

foreach($input as $key=>$value) {

    if(strstr($key,'attribute_')) {
        $i = str_replace("attribute_", "", $key);


        if (!empty($value)) {   
            if ($value instanceof Illuminate\Http\UploadedFile) {
                dd('lets have a collection...');
            }

            Attribute::where('id', $i)->update(['value' => $value]);
        } else{
            Attribute::where('id', $i)->update(['value' => '']);
        }

    }
}

您可以看到我尝试使用instanceOf 检查$value,但没有成功。 if 语句永远不会为真,页面只会返回。

属性输入提交示例 -

@if($comp_attr['data_type'] == 'file')
   <div class="form-grp img-form" style="width: {{ $comp_attr['width'] }}%;">
    <label>Banner Image</label>
        <span class="img-hold">
            {{ $banner }}
        </span>
    <input type="{{ $comp_attr['field_type'] }}" name="attribute_{{ $comp_attr['id'] }}" />
   </div>
@else
    <div class="form-grp" style="width: {{ $comp_attr['width'] }}%;">
        <label>{{ $comp_attr['label'] }}</label>
        <input type="{{ $comp_attr['field_type'] }}" name="attribute_{{ $comp_attr['id'] }}" value="{{ $comp_attr['value'] }}" />
    </div>
@endif

【问题讨论】:

  • 您能否将前端表单的 sn-p 和处理发布到服务器的代码粘贴到服务器上?
  • 表单太大,无法发布,但我可以向您展示如何发布属性的示例。更新了原帖。
  • 甜蜜,我添加了一个答案,该答案应该适合从添加的示例派生的用例:)
  • 它不会是 UploadedFile 的实例,除非您在该字段上调用 ​​$request-&gt;file('field_name') 函数。比与实例进行比较更简单的方法可能是$request-&gt;hasFile('field_name')

标签: laravel laravel-5


【解决方案1】:

我相信您正在尝试获取$_FILES

所以你可以使用

$request->allFiles();

这将返回请求中的所有文件。然后你可以对其执行任何操作。

希望对你有帮助

【讨论】:

  • > "数据会不同,所以我不能写任何静态的东西"
  • 我的意思是输入名称总是不同的,所以我不能根据输入名称编写静态请求。我确实需要能够判断发布的请求是否是文件。因为我遍历了所有的请求,你可以做一个不是文件来跳过吗?
【解决方案2】:

代替

name="attribute_{{ $comp_attr['id'] }}"

试试

name="attributes[{{ $comp_attr['id'] }}]"

注意新的 's' ^ 和 {{ }} 两侧的括号

通过使用方括号,我们将其转换为关联数组,由刀片变量作为键。

然后在 php 端你可以做这样的事情:

foreach($request->get('attributes') as $i => $value)
{
     ...
}

【讨论】:

    猜你喜欢
    • 2015-05-27
    • 1970-01-01
    • 2016-06-20
    • 2014-10-28
    • 2016-05-24
    • 2015-01-30
    • 2017-05-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多