Использование Lumen 5.4.5.
Я недавно опробовал устаревший учебник Lumen от 2015 года (http://loige.co/developing-a-web-application-with-lumen-and-mysql/) с последней версией Lumen. По большей части все из этого руководства, которое было написано для предыдущей версии Lumen, продолжает работать, за исключением одного маршрута. Этот маршрут предназначен для возврата другой записи из таблицы базы данных каждый день года. Ранее я уже использовал этот учебник в тот же день и могу подтвердить, что все, по крайней мере, используется для работы по назначению, но какие-то изменения, внесенные в новейшую версию Lumen, по-разному трактуют синтаксис, вызывая ошибку.
Вот маршрут:
use App\Models\Quote;
/**
* Display the today quote
*/
$app->get('/', function() use ($app) {
/*
* Picks a different quote every day
* (for a maximum of 366 quotes)
*
* - $count: the total number of available quotes
* - $day: the current day of the year (from 0 to 365)
* - $page: the page to look for to retrieve the
* correct record
*/
$count = Quote::query()->get()->count();
$day = (int) date('z');
$page = $day % $count + 1;
$quotes = Quote::query()->get()->forPage($page, 1)->all();
if (empty($quotes)) {
throw new \Illuminate\Database\Eloquent\ModelNotFoundException();
}
return view('quote', ['quote' => $quotes[0]]);
});
И вот краткое изложение ошибки:
ErrorException... Undefined offset: 0
at Application->Laravel\Lumen\Concerns\{closure}(8, 'Undefined offset: 0', '/var/www/motivational/routes/web.php', 44, array('app' => object(Application), 'count' => 3, 'day' => 67, 'page' => 2, 'quotes' => array(object(Quote)))) in web.php line 44
В частности, жалуются на последнюю строку в маршруте:
return view('quote', ['quote' => $quotes[0]]);
Кажется, ему не нравится 0, но если я заменю его на 1, он будет работать нормально. В моей таблице котировок есть только 3 записи с идентификаторами от 1 до 3, и сегодня маршрут возвращает идентификатор 2.
Вопрос: Что заставило бы предыдущую версию Lumen принять эту последнюю строку кода и работать без проблем, пока ломается последняя версия Lumen? Единственное, что я хотел бы упомянуть, это то, что раньше я делал этот урок по PHP 5.6, но теперь я на PHP 7.
Дополнительная информация: Вот результат var_dump ($ quotes), когда я использую 1 вместо 0 …
array(1) { [1]=> object(App\Models\Quote)#51 (24) { ["connection":protected]=> NULL ["table":protected]=> NULL ["primaryKey":protected]=> string(2) "id" ["keyType":protected]=> string(3) "int" ["incrementing"]=> bool(true) ["with":protected]=> array(0) { } ["perPage":protected]=> int(15) ["exists"]=> bool(true) ["wasRecentlyCreated"]=> bool(false) ["attributes":protected]=> array(6) { ["id"]=> int(2) ["created_at"]=> string(19) "2017-03-09 09:02:02" ["updated_at"]=> string(19) "2017-03-09 09:02:02" ["text"]=> string(26) "Dream big and dare to fail" ["author"]=> string(14) "Norman Vaughan" ["background"]=> string(5) "2.jpg" } ["original":protected]=> array(6) { ["id"]=> int(2) ["created_at"]=> string(19) "2017-03-09 09:02:02" ["updated_at"]=> string(19) "2017-03-09 09:02:02" ["text"]=> string(26) "Dream big and dare to fail" ["author"]=> string(14) "Norman Vaughan" ["background"]=> string(5) "2.jpg" } ["casts":protected]=> array(0) { } ["dates":protected]=> array(0) { } ["dateFormat":protected]=> NULL ["appends":protected]=> array(0) { } ["events":protected]=> array(0) { } ["observables":protected]=> array(0) { } ["relations":protected]=> array(0) { } ["touches":protected]=> array(0) { } ["timestamps"]=> bool(true) ["hidden":protected]=> array(0) { } ["visible":protected]=> array(0) { } ["fillable":protected]=> array(0) { } ["guarded":protected]=> array(1) { [0]=> string(1) "*" } } }
Задача ещё не решена.
Других решений пока нет …