0
0

More than 5 years have passed since last update.

Laravel5.1のチュートリアルをLaravel5.2でやってしまってErrorException in hoge.php line 1: Undefined variable: errors (View: hoge) line 1と出た時の対処

Posted at

Laravel5.2でLaravel5.1のチュートリアルを進めようとしたら引っかかりました。
初めてのLaravelで、がっつりはまりました。

環境

  • Mac
  • MAMP
    • PHP5.6.10

チュートリアル

JP http://readouble.com/laravel/5/1/ja/quickstart.html
EN http://readouble.com/laravel/5/1/en/quickstart.html

出るエラー文

ErrorException in c9bba7bef91ae85ed311c8c46142886017e11249.php line 1:
Undefined variable: errors (View: /Applications/MAMP/htdocs/samplelaravel/quickstart/resources/views/common/errors.blade.php) (View: /Applications/MAMP/htdocs/samplelaravel/quickstart/resources/views/common/errors.blade.php)
in c9bba7bef91ae85ed311c8c46142886017e11249.php line 1
at CompilerEngine->handleViewException(object(ErrorException), '1') in PhpEngine.php line 44
at PhpEngine->evaluatePath('/Applications/MAMP/htdocs/samplelaravel/quickstart/storage/framework/views/796668ad783b17aa8bf345ff9216dc4c70f43ee4.php', array('__env' => object(Factory), 'app' => object(Application))) in CompilerEngine.php line 59
at CompilerEngine->get('/Applications/MAMP/htdocs/samplelaravel/quickstart/resources/views/tasks.blade.php', array('__env' => object(Factory), 'app' => object(Application))) in View.php line 147
at View->getContents() in View.php line 118
at View->renderContents() in View.php line 83
at View->render() in Response.php line 53
at Response->setContent(object(View)) in Response.php line 199
at Response->__construct(object(View)) in Router.php line 1087
at Router->prepareResponse(object(Request), object(View)) in Router.php line 725
at Router->Illuminate\Routing\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 52
at Pipeline->Illuminate\Routing\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 103
at Pipeline->then(object(Closure)) in Router.php line 726
at Router->runRouteWithinStack(object(Route), object(Request)) in Router.php line 699
at Router->dispatchToRoute(object(Request)) in Router.php line 675
at Router->dispatch(object(Request)) in Kernel.php line 246
at Kernel->Illuminate\Foundation\Http\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 52
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in CheckForMaintenanceMode.php line 44
at CheckForMaintenanceMode->handle(object(Request), object(Closure))
at call_user_func_array(array(object(CheckForMaintenanceMode), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32
at Pipeline->Illuminate\Routing\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 103
at Pipeline->then(object(Closure)) in Kernel.php line 132
at Kernel->sendRequestThroughRouter(object(Request)) in Kernel.php line 99
at Kernel->handle(object(Request)) in index.php line 54

Laravel5.2だと動かないLaravel5.1のコード

routes.php
<?php

use App\Task;
use Illuminate\Http\Request;

/**
 * 全タスク表示
 */
Route::get('/', function () {
    //
});

/**
 * 新タスク追加
 */
Route::post('/task', function (Request $request) {
    //
});

/**
 * 既存タスク削除
 */
Route::delete('/task/{id}', function ($id) {
    //
});

Laravel5.2で動くコード

routes.php

<?php
Route::group(['middleware' => ['web']], function () {
    //routes here
    /**
     * 全タスク表示
     */
    Route::get('/', function () {
        //
        return view('tasks');
    });

    /**
     * 新タスク追加
     */
    Route::post('/task', function (Request $request) {
        //
    });

    /**
     * 既存タスク削除
     */
    Route::delete('/task/{id}', function ($id) {
        //
    });
});

動かなかった理由

以下ということです。

「全リクエストの全ビューで、いつでも$errors変数は利用できるのが、重要なポイントです。」
なぜ上記の機能が実現できているかといいますと、エラーをセッションに入れているからです。
そして、その機能は、Kernel.php の $middlewareGroups['web'] 内に記載されている、
StartSessionミドルウェアとShareErrorsFromSessionミドルウェアで実現されているようです。
引用元:https://teratail.com/questions/24761

やってしまった理由

チュートリアルに書いてあったものをそのまま打ってしまった。
5.1のチュートリアルをやってるのに、5.2って出てきたのをスルーしていた。(気がついてはいた)

composer create-project laravel/laravel quickstart --prefer-dist
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0