В Laravel Я создал файл Utils с некоторыми статическими методами, чтобы делать разные вещи. Один из них - захватить данные из api Bandcamp. Функция вызывается из подзаголовка, называемого release.small. Я не уверен, что здесь наложено лезвие или нет, но вот как устроены представления.Статический метод выдает ошибку при возврате объекта/строки?
templates.default ->artists.view (@extends (templates.default)) ->releases.discography (входит в artists.view) ->releases.small (входит в релизах .discography)
В 'releases.small' У меня есть следующий код:
$data = Utils::apiAlbumData($release->bandcamp['url']);
Ниже приведен код для Utils::apiAlbumData($url)
и Utils::albumIdFromAlbumUrl($url)
. Здесь прокомментированы эхо-сообщения, которые я только что проверил, чтобы функции работали. albumIdFromAlbumUrl()
возвращает действительный номер идентификатора, который используется в file_get_contents
. После использования json_decode
я могу получить доступ к атрибутам данных $, таким как $data->small_art_url
, и когда я print_r($data)
выглядит так, как должно.
public static function apiAlbumData($url) {
$aid = Utils::albumIdFromAlbumUrl($url);
// echo $aid; // this fine, echoes the expected number
$json = file_get_contents("http://api.bandcamp.com/api/album/2/info?key=vatnajokull&album_id=" . $aid . "&debug");
$data = json_decode($json);
return $data;
//return "some text";
/*
echo $data->small_art_url . "<br />"; // fine
echo $data->album_id . "<br />"; // fine
echo "<pre>";
print_r ($data); // fine
//echo "</pre>";
die;
*/
}
public static function albumIdFromAlbumUrl($url) {
$json = file_get_contents ("http://api.bandcamp.com/api/url/1/info?key=vatnajokull&url=" . urlencode($url));
$data = json_decode ($json);
return $data->album_id;
}
если я пытаюсь вернуть $ данные из класса Laravel вместо просто напечатать его на экран следующее исключение:
ErrorException (E_UNKNOWN) Не определено свойство: StdClass :: $ album_id (Вид: /home/shane478/beta/dv/app/views/releases/small.blade.php) (Вид: /home/shane478/beta/dv/app/views/releases/small.blade.php) (Вид: /home/shane478/beta/dv/app/views/releases/small.blade.php)
The ve ry такая же ошибка возникает, если я пытаюсь вернуть «некоторый текст» вместо $ data. Затем он показывает мне Utils :: albumIdFromAlbumUrl ($ url), который имеет строку return $ data-> album_id; но я знаю, что эта функция работает нормально, потому что я повторил ее возвращаемое значение в apiAlbumData ($ url). 'album_id' не отображается ни в одном из других файлов вида.
Что я делаю неправильно ?!
EDIT - просто добавьте в просмотр файлы и функцию контроллера в ответ на комментарий ниже. Слишком много информации, вероятно, ... Я также вырезать один из видов сверху, теперь выглядеть следующим образом:
templates.default ->artists.view (@extends (шаблонов. по умолчанию)) ->releases.discography (включено в артисты.вид)
здесь releases/discography.blade.php
(содержащий проблему статического метода закомментирована)
{{-- */ $i=1; /* --}}
<div data-equalizer>
@foreach($artist->releases as $release)
<div class="large-{{$discsize}} columns panel release-small" data-equalizer-watch>
@if(Str::startsWith($release->image, 'http'))
<img src="{{ $release->image }}" />
@elseif(is_numeric ($release->image))
<img src="url-to-file-here" />
@else
<img src="http://example.com/{{ $release->image }}" />
@endif
<h4>{{ $release->title }}</h4>
@foreach ($release->issues as $issue)
{{ $issue->type }}: {{ date('Y', strtotime($issue->date)) }}<br />
@foreach($issue->items as $item)
{{ $item->cat_num }} | {{ $item->format->format }}
@endforeach
<?php // $data = Utils::apiAlbumData($release->bandcamp['url']); ?>
@endforeach
</div>
{{-- */ $i++; /* --}}
@if (($i - $rowsize == 1) && ($i < count($artist->releases)))
{{-- */ $i=1; /* --}}
</div>
<div data-equalizer>
@endif
@endforeach
</div>
здесь является releases/view.blade.php
:
@extends('templates.default')
@section('pagetitle')
{{ $artist->name }} :
@stop
@section('content')
<div class="large-12">
<h2>{{ Utils::sortOrder($artist->name) }}</h2>
{{ nl2br($artist->about) }}
</div>
@include('releases.discography')
@stop
Вот метод контроллера отвечает
public function view($slug) {
$artist = Artist::where('slug', '=', $slug)->first();
list ($discSize, $discsPerRow) = Utils::calculateRowItems(count ($artist->releases));
return View::make('artists.view')->withArtist($artist)->withDiscsize($discSize)->withRowsize($discsPerRow);
}
YOu ошибка исходит из шаблона клинка - но вы не показываете, как вы передаете данные этому шаблону. Это заставляет меня задаться вопросом, не проблема ли в вашем статическом вызове, а что-то еще вокруг создания вида. –