2016-04-25 5 views
0

Я вызываю некоторые API, чтобы заполнить массив. Конечный вывод что-то вроде следующегоLaravel Blade - Отображение содержимого массива

Array 
(
    [0] => Array 
    (
     [leadData] => Array 
     (
      [LeadID] => 1232806 
      [DateIdentified] => 21/04/2016 
      [Client] => Prospect 1 
      [LeadName] => Test 
      [Owner] => Some Owner 
      [Value] => 2160.00 
      [Status] => 70% 
     ) 
     [clientData] => Array 
     (
      [BusinessStructure] => 
      [IsProspect] => No 
     ) 
     [quoteData] => Array 
     (
      [QuoteID] => Q0020 
      [ProjectName] => Test 
      [Amount] => 1800.00 
      [AmountTax] => 360.00 
      [AmountIncludingTax] => 2160.00 
      [EstimatedCost] => 450.00 
      [EstimatedCostTax] => 90.00 
      [EstimatedCostIncludingTax] => 540.00 
     ) 
     [customData] => Array 
     (
      [0] => Array 
      (
       [Lead Type] => New 
      ) 
      [1] => Array 
      (
       [Month] => June 
      ) 
     ) 
    ) 
    [1] => Array 
    (
     [leadData] => Array 
     (
      [LeadID] => 1230279 
      [DateIdentified] => 19/04/2016 
      [Client] => Bank1 
      [LeadName] => test 3 
      [Owner] => Some Owner 
      [Value] => 36000.00 
      [Status] => 50% 
     ) 
     [clientData] => Array 
     (
      [BusinessStructure] => 
      [IsProspect] => No 
     ) 
     [quoteData] => Array 
     (
      [QuoteID] => Q0016 
      [ProjectName] => test 3 
      [Amount] => 30000.00 
      [AmountTax] => 6000.00 
      [AmountIncludingTax] => 36000.00 
      [EstimatedCost] => 0.00 
      [EstimatedCostTax] => 0.00 
      [EstimatedCostIncludingTax] => 0.00 
     ) 
    ) 
) 

Одна вещь, чтобы отметить, что иногда не вся информация есть, просто потому, что он не доступен. Таким образом, вы можете видеть, что Array 0 имеет некоторые customData, тогда как Array 1 этого не делает. Другие элементы могут даже не иметь раздел quotData и т. Д.

Итак, у моего шаблона клинка есть эта информация. Я в основном хочу показать все данные, но если он недоступен, просто покажите пустую ячейку. Таким образом, у меня есть следующие заголовки

<table class="table table-bordered table-hover additionalMargin alignment"> 
    <tr class="col-md-12 noPadding"> 
     <thead> 
     <tr> 
      <th>Lead ID</th> 
      <th>Client Name</th> 
      <th>Is Prospect</th> 
      <th>Business Structure</th> 
      <th>Quote ID</th> 
      <th>Project Name</th> 
      <th>Amount</th> 
      <th>Amount Tax</th> 
      <th>Amount inc Tax</th> 
      <th>Cost</th> 
      <th>Cost Tax</th> 
      <th>Cost inc Tax</th> 
      <th>Type</th> 
      <th>Month</th> 
     </tr> 
     </thead> 
    </tr> 
    <tbody> 

    </tbody> 
</table> 

Однако в TBODY, что я делаю, кажется, очень грязный, единственный способ, которым я могу получить данные в правильном месте, если я все проверить, например,

@if(is_array($leadArray)) 
     @foreach($leadArray as $array) 
      <tr> 
       <td> 
        @if(!empty($array['leadData'])) 
         {{ $array['leadData']['LeadID'] }} 
        @endif 
       </td> 
       <td> 
        @if(!empty($array['leadData'])) 
         {{ $array['leadData']['Client'] }} 
        @endif 
       </td> 
       <td> 
        @if(!empty($array['clientData'])) 
         {{ $array['clientData']['IsProspect'] }} 
        @endif 
       </td> 
       <td> 
        @if(!empty($array['clientData'])) 
         {{ $array['clientData']['BusinessStructure'] }} 
        @endif 
       </td> 
       <td> 
        @if(!empty($array['quoteData'])) 
         {{ $array['quoteData']['QuoteID'] }} 
        @endif 
       </td> 
       <td> 
        @if(!empty($array['quoteData'])) 
         {{ $array['quoteData']['ProjectName'] }} 
        @endif 
       </td> 
       <td> 
        @if(!empty($array['quoteData'])) 
         {{ $array['quoteData']['Amount'] }} 
        @endif 
       </td> 
       <td> 
        @if(!empty($array['quoteData'])) 
         {{ $array['quoteData']['AmountTax'] }} 
        @endif 
       </td> 
       <td> 
        @if(!empty($array['quoteData'])) 
         {{ $array['quoteData']['AmountIncludingTax'] }} 
        @endif 
       </td> 
       <td> 
        @if(!empty($array['quoteData'])) 
         {{ $array['quoteData']['EstimatedCost'] }} 
        @endif 
       </td> 
       <td> 
        @if(!empty($array['quoteData'])) 
         {{ $array['quoteData']['EstimatedCostTax'] }} 
        @endif 
       </td> 
       <td> 
        @if(!empty($array['quoteData'])) 
         {{ $array['quoteData']['EstimatedCostIncludingTax'] }} 
        @endif 
       </td> 
       @if(!empty($array['customData'])) 
        @foreach($array['customData'] as $data) 
          <td> 
           @if(!empty($data['Lead Type'])) 
            {{ $data['Lead Type'] }} 
           @endif 
          </td> 
          <td> 
           @if(!empty($data['Month'])) 
            {{ $data['Month'] }} 
           @endif 
          </td> 
        @endforeach 
        @else 
         <td></td> 
         <td></td> 
       @endif 
      </tr> 
     @endforeach 
    @endif 

Есть ли более простой способ сделать это? Или это мой единственный вариант?

Благодаря

+0

Вы можете сделать '{{@ $ массива [«leadData»] [ 'Клиент ']}} 'для подавления ошибок, когда данные отсутствуют. Или предварительно обработайте массив таким образом, который заполняет любые отсутствующие данные с помощью 'null'. – ceejayoz

+0

@ceejayoz, интересно. Документировано ли это где угодно? Если нет, то как это работает? –

+2

@AlexeyMezenin '@' - оператор подавления ошибок PHP. Подробнее см. Http://php.net/manual/en/language.operators.errorcontrol.php. Его следует использовать редко, но ваш выглядит как потенциально подходящий вариант использования. – ceejayoz

ответ

3

Лезвие имеет функцию, где вы можете использовать or означает «эхо этого, если он существует, или это, если он не». Поэтому вы можете сделать

<td>{{ $array['leadData']['LeadID'] or '' }}</td> 

И это в основном приводит к тому, что вы хотите. Гораздо чище, нет? :)

Документация: https://laravel.com/docs/5.2/blade#displaying-data - несколько абзацев вниз.

+1

Я забыл об этом. Ницца. – ceejayoz

+0

Thats на самом деле очень интересно - кажется, также проверить, является ли его пустым, что означает, что мне не нужно это делать. –

+0

@Joel Hinz, это тоже интересно, безусловно, повышать. В документации они говорят, что проверяют 'isset()'. Но проверяет ли он 'is_null()' и 'empty'? –

1

Вы также могли бы сделать это более элегантно и короче итерация массив с именами столбцов (используемых or '', как Джоэл рекомендуется):

{{ $dataColumns['leadData'] = ['LeadID', 'Client'] }} 
{{ $dataColumns['clientData'] = ['IsProspect', 'BusinessStructure'] }} 
{{ #dataColumns['quoteData'] = ['QuoteID', 'ProjectName', 'Amount', 'AmountTax', 'AmountIncludingTax', 'EstimatedCost', 'EstimatedCostTax', 'EstimatedCostIncludingTax'] }} 

@if(is_array($leadArray)) 
    @foreach($leadArray as $array) 
     <tr> 
      @foreach($dataColumns as $dataColumn) 
       @foreach($dataColumn as $column) 
        <td>{{ $array[$dataColumn][$column] or '' }}</td> 
       @endforeach 
      @endforeach 
      @if(!empty($array['customData'])) 
       @foreach($array['customData'] as $data) 
        <td>{{ $data['Lead Type'] or ''}}</td> 
        <td>{{ $data['Month'] or '' }}</td> 
       @endforeach 
      @else 
        <td></td> 
        <td></td> 
      @endif 
     </tr> 
    @endforeach 
@endif 
+0

Спасибо, я дал это попробовать, и он сказал, что html eminities ожидает, что параметр 1 будет строкой, массив задан –

+0

И в какой строке? Кроме того, попробуйте использовать '{!! !!} 'вместо' {{}} ' –

+0

Трудно сказать, потому что он говорит об ошибкеException в строке helpers.php 469: –

Смежные вопросы