Laravel Blade在forelse失败,在foreach工作

时间:2016-08-30 19:31:14

标签: laravel laravel-blade laravel-5.3

我正在将Laravel从5.2升级到5.3,并且我的一个Blade视图已不再有效。我将数组传递给包含的视图以循环它。我正在使用forelse指令,但它一直给我一个未定义的偏移:1错误。

以下是带有视图调用的控制器代码段:

$transactions = $committees->transactions()
    ->where('FiledDate', '<=', $to)  // Upper date
    ->where('FiledDate', '>=', $from)  // Lower date
    ->get();

return view('committees.show',
    [ 
        'data' => $data,
        'transactions' => $transactions,
    ]);

这是Blade文件。

<table class="table table-striped">
<thead>
    <tr><th class="text-center" colspan="5">Transactions</th></tr>
    <tr>
        <th class="text-center">TranId</th>
        <th class="text-center">Tran Date</th>
        <th class="text-center">SubType</th>
        <th class="text-center">Filed Date</th>
        <th class="text-center">Amount</th>
    </tr>
</thead>
<tbody>
@forelse ($transactions AS $transaction)
    <tr>
        <td class="text-center">{{ $transaction->TranId }}</td>
        <td class="text-center">{{ $transaction->TranDate }}</td>
        <td class="text-center">{{ $transaction->SubType }}</td>
        <td class="text-center">{{ $transaction->FiledDate }}</td>
        <td class="text-center">{{ number_format($transaction->Amount, 2, '.', ',') }}</td>
    </tr>
@empty
    <tr><td colspan="5">No Transactions</td></tr>
@endforelse
</tbody>              

我创建了一个虚拟事务数组,但我仍然遇到了同样的错误。

此外,当我使用foreach指令时,它工作正常,但我必须进行额外的检查以检查没有记录。

4 个答案:

答案 0 :(得分:0)

你试过vardumping交易的内容吗?它可能没有您在forelse循环中访问的字段,从而导致错误。

尝试在您的forelse循环中执行{{var_dump($ transaction)}},并确保您在代码中拥有所有要访问的字段。

答案 1 :(得分:0)

在控制器中以这种方式创建$ transaction: $ transacrion not array: 使用此代码:

$transaction = Transaction::all();

答案 2 :(得分:0)

不是迭代的执行失败了,而是编译了Blade模板。这种差异对于调试问题至关重要。直到de 18th of Septemberforelse指令的编译区分大小写,这意味着当它尝试编译语句时,它无法生成输出所需的实际PHP代码所需的匹配项。更新Laravel应解决问题。

因此,澄清一下,这会破坏:

@forelse ($transactions AS $transaction)

虽然这样可行:

@forelse ($transactions as $transaction)

话虽如此,我强烈建议您关注PSR-2并写下所有PHP keywords in lowercase

答案 3 :(得分:0)

您只需要像我在下面提到的那样更新您的@forelse部分:

close_date = DateField(input_formats=['%m/%d/%Y'], label=_('Installation Date'),widget=DateInput())