Jonjie's avatar
Level 12

Route undefined when importing in Laravel excel

I'm trying to use the import funtionality of Laravel excel, but it always return the Route: undefined error even if the route is registered. Please see my code, and details below.

web.php

Route::get('admin/doctors/bulk-upload/data', [
    'middleware' => ['auth', 'auth.admin'],
    'as' => 'admin.doctors.bulk-upload.data',
    'uses' => 'Admin\DoctorUploadController@create'
]);

Route::post('admin/doctors/bulk-data/upload', [
    'as' => 'admin.doctors.bulk-data.upload',
    'uses' => 'Admin\DoctorUploadController@upload'
]);

UsersImport.php

namespace App\Imports;

use App\User;
use Maatwebsite\Excel\Concerns\ToModel;
use Maatwebsite\Excel\Concerns\WithValidation;
use Maatwebsite\Excel\Concerns\WithHeadingRow;

class UsersImport implements ToModel, WithHeadingRow//, WithValidation
{

    public function model(array $row)
    {

        $user = User::create([
            'name' => $row['first_name'] . ' ' . $row['last_name'],
            'email' => $row['email'],
            'password' => bcrypt($row['email']),
            'role' => 'doctor',
            'status' => 1
        ]);

        return $user;
    }

    public function headingRow()
    {
        return 1;
    }

}

Controller

use App\Imports\UsersImport;
use App\Http\Controllers\Controller;
use Maatwebsite\Excel\Facades\Excel;

class DoctorUploadController extends Controller
{

    public function create()
    {
        return view('admin.doctors.bulk-upload');
    }

    public function upload()
    {
        $this->validate(request(), [
            'excel' => ['required', 'file', 'mimes:xlsx']
        ]);
        
        Excel::import(new UsersImport, request()->file('excel'));

        return redirect()->route('doctors.bulk-upload.data')->with('message', 'Data has been uploaded!');
    }

}

view

<form action="{{ route('admin.doctors.bulk-data.upload') }}" method="post" enctype="multipart/form-data" id="formUpload">
		{{ csrf_field() }}

	<div class="mb-3">
		<input type="file" class="pointer" name="excel" accept=".xlsx">
	</div>

	<button class="btn btn-primary btn-block">
		<span class="fas fa-file-upload"></span> Upload
	</button>
</form>

Error

Route [doctors.bulk-upload.data] not defined.

0 likes
1 reply
tykus's avatar
tykus
Best Answer
Level 104

redirect()->route('doctors.bulk-upload.data')

You're missing the admin. prefix in the redirect.

return redirect()->route('admin.doctors.bulk-upload.data')->with('message', 'Data has been uploaded!');

Please or to participate in this conversation.