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

Q8Xbox's avatar

Array to string conversion at RouteFileRegistrar.php:35

I was doing so testing in my project Laravel 9 and working with role what i did is that i modify "store" method in AuthenticatedSessionController.php in order to check user roles and redirect me to specific route name but it did not work so i do run command "php artisan optimize:clear" because i was display that "route admin_dashboard is not define" after this i can not even run "php artisan serve" because it display below error so could someone explain the issue i have and how i can fix it ?

user1@LAPTOP-0QKK3J4C server % php artisan serve         

   ErrorException 

  Array to string conversion

  at vendor/laravel/framework/src/Illuminate/Routing/RouteFileRegistrar.php:35
     31▕     public function register($routes)
     32▕     {
     33▕         $router = $this->router;
     34▕ 
  ➜  35▕         require $routes;
     36▕     }
     37▕ }
     38▕ 

      +4 vendor frames 
  5   app/Providers/RouteServiceProvider.php:37
      Illuminate\Routing\RouteRegistrar::group("/Users/user1/Desktop/laravelProjects/auctionCars/server/routes/web.php")

      +15 vendor frames 
  21  [internal]:0
      Illuminate\Foundation\Application::Illuminate\Foundation\{closure}(Object(App\Providers\RouteServiceProvider))

web.php file

<?php

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\UsersListController;
use App\Http\Controllers\CategoriesListController;
use App\Http\Controllers\SubCategoriesListController;
use App\Http\Controllers\PostsListController;

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

Route::get('/', function () {
    return view('welcome');
})->name('welcome');

Route::controller(UsersListController::class)->group(['middleware' => ['auth', 'admin'], 'prefix' => 'admin'], function () {
    Route::get('/users', 'DisplayUsers')->name('usersList');
    Route::get('/users/add', 'AddUser')->name('AddUser');
    Route::post('/users/add', 'StoreUser')->name('StoreUser');
    Route::get('/users/edit/{id}', 'EditUser')->name('EditUser');
    Route::post('/users/update/{id}', 'UpdateUser')->name('UpdateUser');
    Route::post('/users/delete/{id}', 'DeleteUser')->name('DeleteUser');
});

Route::controller(CategoriesListController::class)->group(['middleware' => ['auth', 'admin'], 'prefix' => 'admin'], function () {
    Route::get('/categories', 'DisplayCategories')->name('categoriesList');
    Route::post('/categories/add', 'AddCategory')->name('AddCategory');
    Route::post('/categories/update/{id}', 'UpdateCategory')->name('UpdateCategory');
    Route::post('/categories/delete/{id}', 'DeleteCategory')->name('DeleteCategory');
});

Route::controller(SubCategoriesListController::class)->group(['middleware' => ['auth', 'admin'], 'prefix' => 'admin'], function () {
    Route::get('/subcategory', 'DisplaySubCategories')->name('subCategoriesList');
    Route::get('/getcategories', 'GetCategories')->name('GetCategories');
    Route::post('/subcategory/add', 'AddSubCategory')->name('AddSubCategory');
    Route::post('/subcategory/update/{id}', 'UpdateSubCategory')->name('UpdateSubCategory');
    Route::post('/subcategory/delete/{id}', 'DeleteSubCategory')->name('DeleteSubCategory');
});

Route::controller(PostsListController::class)->group(['middleware' => ['auth', 'user'], 'prefix' => 'user'], function () {
    Route::get('/posts', 'DisplayPosts')->name('postsList');
    Route::get('/getsubcategories', 'GetSubCategories')->name('GetSubCategories');
    Route::get('/posts/add', 'AddPost')->name('AddPost');
    Route::post('/posts/add', 'StorePost')->name('StorePost');
    Route::get('/posts/edit/{id}', 'EditPost')->name('EditPost');
    Route::post('/posts/update/{id}', 'UpdatePost')->name('UpdatePost');
    Route::post('/posts/delete/{id}', 'DeletePost')->name('DeletePost');
});

// USER DASHBOARD
Route::get('/dashboard', function () {
    return view('dashboard');
})->middleware(['auth', 'user'])->name('dashboard');

// ADMIN DASHBOARD
Route::get('/admin_dashboard', function () {
    return view('dashboardAdmin');
})->middleware(['auth', 'admin'])->name('admin_dashboard');

require __DIR__.'/auth.php';

AuthenticatedSessionController.php file

<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use App\Http\Requests\Auth\LoginRequest;
use App\Providers\RouteServiceProvider;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class AuthenticatedSessionController extends Controller
{
    /**
     * Display the login view.
     *
     * @return \Illuminate\View\View
     */
    public function create()
    {
        return view('auth.login');
    }

    /**
     * Handle an incoming authentication request.
     *
     * @param  \App\Http\Requests\Auth\LoginRequest  $request
     * @return \Illuminate\Http\RedirectResponse
     */
    public function store(LoginRequest $request)
    {
        $request->authenticate();

        $request->session()->regenerate();

        if( Auth::check() )
        {
            /** @var User $user */
            $user = Auth::user();

            // if user is not admin take him to his dashboard
            if ( $user->hasRole('admin') ) {
                return redirect(route('admin_dashboard'));
            }

            // allow admin to proceed with request
            else if ( $user->hasRole('user') ) {
                return redirect(route('dashboard'));
            }
        }

        /*return redirect()->intended(RouteServiceProvider::HOME);*/
    }

    /**
     * Destroy an authenticated session.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\RedirectResponse
     */
    public function destroy(Request $request)
    {
        Auth::guard('web')->logout();

        $request->session()->invalidate();

        $request->session()->regenerateToken();

        return redirect('/');
    }
}

0 likes
7 replies
rodrigo.pedra's avatar
Level 56

When using Route::controller, it returns a RouteRegistrar object, and its group() method is different from the Route::group() you are used to.

Try changing one of your groups declarations to use a fluent syntax instead of an array of options:

Route::controller(UsersListController::class)->middleware(['auth', 'admin'])->prefix('admin')->group(function () {
    Route::get('/users', 'DisplayUsers')->name('usersList');
    Route::get('/users/add', 'AddUser')->name('AddUser');
    Route::post('/users/add', 'StoreUser')->name('StoreUser');
    Route::get('/users/edit/{id}', 'EditUser')->name('EditUser');
    Route::post('/users/update/{id}', 'UpdateUser')->name('UpdateUser');
    Route::post('/users/delete/{id}', 'DeleteUser')->name('DeleteUser');
});
1 like
Q8Xbox's avatar

@rodrigo.pedra It was working fine before with no issue what have been changed when we run this command: "php artisan optimize:clear" and make it does not work properly anymore...?!

One more thing currently the user when have 'user' role it direct him successfully to user dashboard but when have 'admin' role it will direct him to admin dashboard but display an error:

Target class [App\Http\Middleware\AdminAuthenticated] does not exist.
rodrigo.pedra's avatar

@Q8Xbox

You probably converted your route groups to the recent Route::controller() method recently.

optimize:clear clears the cached routes, cached config, cached events, and other cached assets.

My guess is that you:

  • had the routes working without using Route::controller() before,
  • had the routes cached,
  • refactored to use Route::controller(),
  • the routes kept working as they were cached, so it ignored the invalid syntax
  • ran optimize:clear and then discovered it is wrong

Please try what was suggested instead of just saying: "it was working before".

The idea of seeking help on a forum is to accept suggestions, sometimes our eyes are tired that things we think are simple and not possible are the correct solution.

Regarding this error:

Target class [App\Http\Middleware\AdminAuthenticated] does not exist.

The error is very clear. Do you have the AdminAuthenticated class in your project? The admin route is asking fo this middleware.

It really seems you had the route cached for a long time before doing a large refactoring and maybe deleting some middleware or refactor to use Route::controller.

Also this makes an additional question., ideally try to either list everything on your opening post, or start a new thread for additional questions.

One last tip: never run locally with cached assets such as routes, config or view. You can cache them once in a while to do small tests or proof of concepts, but don't forget to clear your local cache.

Q8Xbox's avatar

@rodrigo.pedra i already modify routes group base on your suggestion before i reply and the purpose of my question was to understand how things works since i'm in process of learning.

Yes, I have this middleware since i create it when try to make roles login using this tutorial: https://learn2torials.com/a/laravel8-authentication-based-on-roles

AdminAuthenticated​.php

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
use App\Models\UsersList;
use Illuminate\Support\Facades\Auth;

class AdminAuthenticated​
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse)  $next
     * @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse
     */
    public function handle(Request $request, Closure $next)
    {
        if( Auth::check() )
        {
            /** @var User $user */
            $user = Auth::user();

            // if user is not admin take him to his dashboard
            if ( $user->hasRole('user') ) {
                return redirect(route('dashboard'));
            }

            // allow admin to proceed with request
            else if ( $user->hasRole('admin') ) {
                return $next($request);
            }
        }

        abort(403);  // permission denied error
    }
}

UserAuthenticated.php

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
use App\Models\UsersList;
use Illuminate\Support\Facades\Auth;
use App\Providers\RouteServiceProvider;

class UserAuthenticated
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse)  $next
     * @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse
     */
    public function handle(Request $request, Closure $next)
    {
        if( Auth::check() )
        {
            /** @var User $user */
            $user = Auth::user();

            // if user is not admin take him to his dashboard
            if ( $user->hasRole('admin') ) {
                return redirect(route('admin_dashboard'));
            }

            // allow admin to proceed with request
            else if ( $user->hasRole('user') ) {
                return $next($request);
            }
        }

        abort(403);  // permission denied error
    }
}

RedirectIfAuthenticated.php

<?php

namespace App\Http\Middleware;

use App\Providers\RouteServiceProvider;
use Closure;
use App\Models\UsersList;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class RedirectIfAuthenticated
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse)  $next
     * @param  string|null  ...$guards
     * @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse
     */
    public function handle(Request $request, Closure $next, ...$guards)
    {
        $guards = empty($guards) ? [null] : $guards;

        foreach ($guards as $guard) {
            if (Auth::guard($guard)->check()) {
                /** @var User $user */
                $user = Auth::guard($guard);

                // to admin dashboard
                if($user->hasRole('admin')) {
                    return redirect(route('admin_dashboard'));
                }

                // to user dashboard
                else if($user->hasRole('user')) {
                    return redirect(route('dashboard'));
                }
            }
        }

        return $next($request);
    }
}

AuthenticatedSessionController.php

<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use App\Http\Requests\Auth\LoginRequest;
use App\Providers\RouteServiceProvider;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class AuthenticatedSessionController extends Controller
{
    /**
     * Display the login view.
     *
     * @return \Illuminate\View\View
     */
    public function create()
    {
        return view('auth.login');
    }

    /**
     * Handle an incoming authentication request.
     *
     * @param  \App\Http\Requests\Auth\LoginRequest  $request
     * @return \Illuminate\Http\RedirectResponse
     */
    public function store(LoginRequest $request)
    {
        $request->authenticate();

        $request->session()->regenerate();

        if( Auth::check() )
        {
            /** @var User $user */
            $user = Auth::user();

            // if user is not admin take him to his dashboard
            if ( $user->hasRole('admin') ) {
                return redirect(route('admin_dashboard'));
            }

            // allow admin to proceed with request
            else if ( $user->hasRole('user') ) {
                return redirect(route('dashboard'));
            }
        }

        /*return redirect()->intended(RouteServiceProvider::HOME);*/
    }

    /**
     * Destroy an authenticated session.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\RedirectResponse
     */
    public function destroy(Request $request)
    {
        Auth::guard('web')->logout();

        $request->session()->invalidate();

        $request->session()->regenerateToken();

        return redirect('/');
    }
}

Kernel.php

<?php

namespace App\Http;

use Illuminate\Foundation\Http\Kernel as HttpKernel;

class Kernel extends HttpKernel
{
    /**
     * The application's global HTTP middleware stack.
     *
     * These middleware are run during every request to your application.
     *
     * @var array<int, class-string|string>
     */
    protected $middleware = [
        // \App\Http\Middleware\TrustHosts::class,
        \App\Http\Middleware\TrustProxies::class,
        \Illuminate\Http\Middleware\HandleCors::class,
        \App\Http\Middleware\PreventRequestsDuringMaintenance::class,
        \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
        \App\Http\Middleware\TrimStrings::class,
        \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
    ];

    /**
     * The application's route middleware groups.
     *
     * @var array<string, array<int, class-string|string>>
     */
    protected $middlewareGroups = [
        'web' => [
            \App\Http\Middleware\EncryptCookies::class,
            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
            \Illuminate\Session\Middleware\StartSession::class,
            \Illuminate\View\Middleware\ShareErrorsFromSession::class,
            \App\Http\Middleware\VerifyCsrfToken::class,
            \Illuminate\Routing\Middleware\SubstituteBindings::class,
        ],

        'api' => [
            // \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
            'throttle:api',
            \Illuminate\Routing\Middleware\SubstituteBindings::class,
        ],
    ];

    /**
     * The application's route middleware.
     *
     * These middleware may be assigned to groups or used individually.
     *
     * @var array<string, class-string|string>
     */
    protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'auth.session' => \Illuminate\Session\Middleware\AuthenticateSession::class,
        'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
        'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
        'user' => \App\Http\Middleware\UserAuthenticated::class,
        'admin' => \App\Http\Middleware\AdminAuthenticated::class,
    ];
}

web.php

<?php

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\UsersListController;
use App\Http\Controllers\CategoriesListController;
use App\Http\Controllers\SubCategoriesListController;
use App\Http\Controllers\PostsListController;

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

Route::get('/', function () {
    return view('welcome');
})->name('welcome');

Route::controller(UsersListController::class)->middleware(['auth', 'admin'])->prefix('admin')->group( function () {
    Route::get('/users', 'DisplayUsers')->name('usersList');
    Route::get('/users/add', 'AddUser')->name('AddUser');
    Route::post('/users/add', 'StoreUser')->name('StoreUser');
    Route::get('/users/edit/{id}', 'EditUser')->name('EditUser');
    Route::post('/users/update/{id}', 'UpdateUser')->name('UpdateUser');
    Route::post('/users/delete/{id}', 'DeleteUser')->name('DeleteUser');
});

Route::controller(UsersListController::class)->middleware(['auth', 'admin'])->prefix('admin')->group( function () {
    Route::get('/categories', 'DisplayCategories')->name('categoriesList');
    Route::post('/categories/add', 'AddCategory')->name('AddCategory');
    Route::post('/categories/update/{id}', 'UpdateCategory')->name('UpdateCategory');
    Route::post('/categories/delete/{id}', 'DeleteCategory')->name('DeleteCategory');
});

Route::controller(UsersListController::class)->middleware(['auth', 'admin'])->prefix('admin')->group( function () {
    Route::get('/subcategory', 'DisplaySubCategories')->name('subCategoriesList');
    Route::get('/getcategories', 'GetCategories')->name('GetCategories');
    Route::post('/subcategory/add', 'AddSubCategory')->name('AddSubCategory');
    Route::post('/subcategory/update/{id}', 'UpdateSubCategory')->name('UpdateSubCategory');
    Route::post('/subcategory/delete/{id}', 'DeleteSubCategory')->name('DeleteSubCategory');
});

Route::controller(UsersListController::class)->middleware(['auth', 'user'])->prefix('user')->group( function () {
    Route::get('/posts', 'DisplayPosts')->name('postsList');
    Route::get('/getsubcategories', 'GetSubCategories')->name('GetSubCategories');
    Route::get('/posts/add', 'AddPost')->name('AddPost');
    Route::post('/posts/add', 'StorePost')->name('StorePost');
    Route::get('/posts/edit/{id}', 'EditPost')->name('EditPost');
    Route::post('/posts/update/{id}', 'UpdatePost')->name('UpdatePost');
    Route::post('/posts/delete/{id}', 'DeletePost')->name('DeletePost');
});

// USER DASHBOARD
Route::get('/dashboard', function () {
    return view('dashboard');
})->middleware(['auth', 'user'])->name('dashboard');

// ADMIN DASHBOARD
Route::get('/admin_dashboard', function () {
    return view('dashboardAdmin');
})->middleware(['auth', 'admin'])->name('admin_dashboard');

require __DIR__.'/auth.php';
rodrigo.pedra's avatar

@Q8Xbox

Where your PHP file for the AdminAuthenticated​ is located inside your project directory?

The error is that this class does not exists, maybe you have it on the wrong path. Composer autoloader will try to find the file containing this class based on its namespace.

So this class should be placed on a PHP file located at:

./app/Http/Middleware/AdminAuthenticated​.php.php

From your project's root directory.

You can also try running:

composer dump-autoload

To tell composer (PHP dependencies manager) to rebuild its autoload file map,

and finally you can try removing any .php files from this directory:

./bootstrap/cache/

From your project's root folder. The PHP files in this folders are auto-genarated by demand, or when you ask Laravel to cache something such as routes, config, etc.

If you did change any file under your project's ./vendor/ directory, which you should never need to do, delete your project's ./vendor/ directory and run:

composer install

To re-install your project clean dependencies.

Q8Xbox's avatar

@rodrigo.pedra that won't help to fix this issue about

Target class [App\Http\Middleware\AdminAuthenticated] does not exist.

and yes i have AdminAuthenticated.php file here: /app/Http/Middleware/AdminAuthenticated​.php

rodrigo.pedra's avatar

@Q8Xbox well the error is clear:

Target class [App\Http\Middleware\AdminAuthenticated] does not exist.

Composer autoloader cannot find this class.

Either you have a mismatch between the class name and the file name, both should be exactly the same.

Or you have a typo when importing it.

that won't help to fix this issue about

Well this signals you didn't even try anything I suggested, so the only thing I can do is wish you good luck.

By the way the thread was about the Route::group(), I am not asking for you to mark any of my answers as best answers, but just as an advice, I have the feeling that fresh threads tend to receive more attention.

So you might consider opening a new thread for this other problem different than the one you opened this thread for.

Good luck =)

Please or to participate in this conversation.