使用流明 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 条 ID 为 1 到 3 的记录,今天该路线返回 ID 2。
问题:什么会导致以前版本的 Lumen 接受最后一行代码并且在最新版本的 Lumen 中断时正常工作?我想提到的唯一另一件事是,我以前在 PHP 5.6 上做本教程,但现在我在 PHP 7 上。
附加数据:当我使用 1 而不是 0 时,这是 var_dump($quotes) 的结果...
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) "*" } } }