新版本的Lumen导致路由返回未定义的偏移量错误

时间:2017-03-09 10:00:29

标签: php laravel lumen lumen-routing

使用流明5.4.5。

我最近在2015年(http://loige.co/developing-a-web-application-with-lumen-and-mysql/)尝试了一个带有最新版本Lumen的日期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) "*" } } } 

0 个答案:

没有答案