Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

FREDERIC LD's avatar

Session data sometimes unavailable when displaying error page

Hi,

I am testing my application routes work and checking that my 404 page displays properly. Right now, I am having a problem I don't understand

I have the following routes:

Route::prefix('/')->middleware('web','auth:web','frontend')->name('frontend.')->namespace('FrontEnd')->group(function() {

    Route::get('/welcome', 'WelcomeController@index')->name('welcome');

    Route::prefix('/self-assessment')->name('self-assessment.')->group(function(){

        Route::get('/page1', 'SelfAssessmentPage1Controller@edit')->name('page1.edit');
        Route::put('/page1', 'SelfAssessmentPage1Controller@update')->name('page1.update');

        Route::get('/page2', 'SelfAssessmentPage2Controller@edit')->name('page2.edit');
        Route::put('/page2', 'SelfAssessmentPage2Controller@update')->name('page2.update');

        Route::get('/page3', 'SelfAssessmentPage3Controller@edit')->name('page3.edit');
        Route::put('/page3', 'SelfAssessmentPage3Controller@update')->name('page3.update');

        Route::get('/page4', 'SelfAssessmentPage4Controller@edit')->name('page4.edit');
        Route::put('/page4', 'SelfAssessmentPage4Controller@update')->name('page4.update');

        Route::get('/completed', 'SelfAssessmentCompletedController@index')->name('completed');

    });

...

If I go to any of the following, my 404 page display correctly using some session variable /self-assessment /self-assessment1

but if I go to /self-assessment/page1234 /self-assessment/page1/ABC then the view fails as it cannot find my session variable

My error handler works like this

    protected function renderHttpException(HttpExceptionInterface $e)
    {

        $status = $e->getStatusCode();

        list($subdomain) = explode('.', \Request::getHost(), 2);

        if ($subdomain != 'www') {
            URL::defaults(['UserSubdomain' => $subdomain]);
            $viewName = "frontend.errors.".$status;
        } else {
            $viewName = "admin.errors.".$status;
            URL::defaults(['UserSubdomain' => 'www']);
        }


        if (view()->exists($viewName)) {
            return response()->view($viewName, ['exception' => $e], $status, $e->getHeaders());
        } else {
            return $this->convertExceptionToResponse($e);
        }
    }

Adding a

dd(Session::all())

in the above function returns [] for /self-assessment/page1234 /self-assessment/page1/ABC

but returns the right set of data for /self-assessment /self-assessment1

0 likes
0 replies

Please or to participate in this conversation.