2016-07-19 7 views
1

У меня есть model во имя Template и migration table во имя templates, и я имею в column name из templatedata в mysql table, который держит массив JSON, пытаясь принести в viewdata я получаю ошибку,Как извлечь JSON массив в Laravel

Ниже мой контроллер:

public function get_template($id) 
{ 
    $gettemplate = Template::findOrFail($id); 
    return view('nitseditor.theme', ['gettemplate' => $gettemplate]); 
} 

Я пытаюсь принести объект, как это:

@foreach($gettemplate as $template) 
    <div class="branding"> 
     <h1 class="logo"> 
      <a href="index.html"><img src="{{ URL::asset($template->templatedata.content.logoimage) }}" alt="" width="25" height="26">NitsEditor</a> 
     </h1> 
    </div> 
@endforeach 

и после в таблице мой JSON format:

[{ 
    "content": { 
      "logo": { 
        "logoimage": "img/home/nitseditorlogo.png", 
        "logolink": "index.html" 
        }, 
       "pages": [ 
        {"pagename": "Mysite", "pagelink": "index.html"}, 
        {"pagename": "Templates", "pagelink": "templates.html"}, 
        {"pagename": "About Us", "pagelink": "aboutus.html"}, 
        {"pagename": "Contact Us", "pagelink": "contactus.html"} 
         ] 
       } 
}] 

я получаю следующее сообщение об ошибке:

Trying to get property of non-object (View: location of blade)

+0

Почему вы зацикливаете '$ gettemplate', когда это всего лишь 1 запись, когда вы извлекаете ее с помощью' findOrFail ($ id) '? – TheFallen

+0

@ TheFallen Я сделал это для 'pagename' и' pagelink', я имею в виду, для этого мне нужно петлю. –

+0

Я хочу сказать, что если вы зациклируете '$ gettemplate', которая является одной записью, вы будете зацикливать свойства объекта * Template *, которые не являются объектами, и именно поэтому вы получаете ошибку. – TheFallen

ответ

3

Попробуйте братан

$data_string = '[{ 
    "content": { 
      "logo": { 
        "logoimage": "img/home/nitseditorlogo.png", 
        "logolink": "index.html" 
        }, 
      "pages": [ 
       {"pagename": "Mysite", "pagelink": "index.html"}, 
       {"pagename": "Templates", "pagelink": "templates.html"}, 
       {"pagename": "About Us", "pagelink": "aboutus.html"}, 
       {"pagename": "Contact Us", "pagelink": "contactus.html"} 
       ] 
      } 
}]'; 
$template = json_decode($data_string); 
echo $template[0]->content->logo->logoimage.'<br>'; 
echo $template[0]->content->pages[0]->pagename; 

Результат

img/home/nitseditorlogo.png 
Mysite 
+0

Спасибо за обновление, возвращая шаблон $ template Я получаю JSON, но как только я создаю $ template-> content, я получаю ту же ошибку. –

+0

@NitishKumar Решено прямо сейчас? xD Хороший звук. –

+0

Я получаю возврат JSON с содержимым внутри большой скобки '[{}]', ваше содержимое 'JSON' находится в' {} ', где бы я ни видел пример для содержимого' [{}] 'we нужно разместить массив, например, в приведенном выше ответе вы взяли 'страницы [0]', я попытался вызвать через 'template [0] -> content', как вы можете видеть в моем вопросе, содержимое' JSON' находится внутри '[]' теперь я получаю ошибку 'Ответное содержимое должно быть строкой или объектом, реализующим __toString(),« object »given.' –