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