Please note that this post may contain affiliate links, and for every purchase you make, at no extra cost to you, a commission fee will be rewarded to me.
You can download the source code of this tutorial here.
Every website requires an admin panel. Unfortunately, unlike Django, Laravel does not include a built-in admin panel, but there are still lots of other choices.
In this tutorial, we’ll use Laravel Nova and Voyager as examples. Nova is the official admin panel for Laravel apps, created by the same team that developed the Laravel framework. While if you prefer a free admin panel, Voyager is a good choice.
Table of Contents
Laravel Nova
Download Laravel Nova
First, you need to register a new account and purchase a license. The solo license is $99 per project, and it includes all features of Laravel Nova. This part should be pretty straightforward.

After that, go to the “Releases” page, and download the latest version.

Install Laravel Nova
Uncompress the file you just downloaded, you should get a folder named something like laravel-nova-fd55xxxxxxxxxxxxxxxxxxc5b5
. Rename it into nova
, and put it in the root directory of our project like this:

Once you are done, we need to update the composer.json
file. Add the following configuration:
"repositories": [
{
"type": "path",
"url": "./nova"
}
],
Now, in the require
section, add laravel/nova
like this:
"require": {
"php": "^7.2.5",
"fideloper/proxy": "^4.2",
"laravel/framework": "^7.0",
"laravel/nova": "*"
},
After the composer.json file has been updated, run the update command in the terminal.
composer update

Finally, run the nova:install
and migrate
Artisan commands. The nova:install
command will install Nova’s service provider and public assets within your application:
php artisan nova:install
php artisan migrate

After that, we need to check if the Nova service provider has been registered. Open config/app.php
and scroll down to the App Service Provider section. If you don’t see NovaServiceProvider
, add the following code:
App\Providers\NovaServiceProvider::class,
Open the browser and go to http://localhost/nova. You should see the login page.

Create A New User
However, we still need a new user account to log in. We can add one using the nova:user
artisan command:
php artisan nova:user
You will be prompt to input you name, email, and password. After that, you should be able to log in with the account.


Define Resources
Now, we need to integrate Nova with our Laravel application by defining “Resources”.
In Laravel Nova, each “resource” corresponds to a Eloquent model in our blog app. By default, Nova resources are stored in the app/Nova
directory of our application. You may generate a new resource using the nova:resource
Artisan command:
php artisan nova:resource Post
The resource this command generated corresponds to the Post
model of our blog application. For now, we only care about $title
, $search
, and fields()
.
$title
defines the value that should be used when the resource is being displayed. For example, when you try to search for a post in Nova, you would want the “title” of the post to be displayed, instead of just an id.
As for $search
, we would want to search by title, meta title, or content. Add the following code in the resource:
/**
* The single value that should be used to represent the resource when being displayed.
*
* @var string
*/
public static $title = 'title';
/**
* The columns that should be searched.
*
* @var array
*/
public static $search = [
'title', 'content',
];
And for the last part, fields()
, we need to talk about it in detail later.
Voyager
Install Voyager
First, include the Voyager package using composer:
composer require tcg/voyager

The following command will install Voyager:
php artisan voyager:install

If you want some dummy data for our project, use this command instead:
php artisan voyager:install --with-dummy
Installation complete.

Next, we need to create a new admin user:
php artisan voyager:admin your@email.com --create
Follow the instructions and type in your user name and password.

Start the server and make sure it is running on port 8000. Run the following command to start the Laravel development server:
php artisan serve
Or if you prefer using XAMPP, open the apache configuration file and make these changes:


This will make Apache serve on port 8000. Finally, visit the URL http://localhost:8000/admin in your browser, and log in with your credentials.
Although Voyager is not as powerful as Nova, it is much easier to setup and use. Once you installed it, you don’t need to write a single line of code.
Image Not Loading
This is a common problem with Voyager if you are using XAMPP, and it is really easy to solve. Edit the .env
file. Change APP_URL
to http://localhost:8000
.

- Laravel Tutorial For Beginners
- Laravel Tutorial #1: Setup the Project
- Laravel Tutorial #2: Routing
- Laravel Tutorial #3: The MVC Structure
- Laravel Tutorial #4: Admin Panel
- Laravel Tutorial #5: Create the Home Page
- Laravel Tutorial #6: Create Models and Setup Admin Panel
- Laravel Tutorial #7: Create Routes, Controllers and Views
- Laravel Tutorial #8: Search
- Laravel Tutorial #9: Wrap Things Up
- Laravel Tutorial #10: Deployment
To study laravel, I would like to use free admin panels or without using admin panels at all
My Laravel version:
“require”: {
“php”: “^7.3”,
“fideloper/proxy”: “^4.2”,
“fruitcake/laravel-cors”: “^2.0”,
“guzzlehttp/guzzle”: “^7.0.1”,
“laravel/framework”: “^8.0”,
“laravel/tinker”: “^2.0”,
“tcg/voyager”: “^1.4”
},
Error installing Voyager:
Downloading (100%)
doctrine/cache suggests installing alcaeus/mongo-php-adapter (Required to use le
gacy MongoDB driver)
intervention/image suggests installing ext-imagick (to use Imagick based image p
rocessing.)
intervention/image suggests installing intervention/imagecache (Caching extensio
n for the Intervention Image library)
tcg/voyager suggests installing laravel/legacy-factories (Required to run Voyage
r tests with Laravel 8.x)
Writing lock file
Generating optimized autoload files
> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> @php artisan package:discover –ansi
Doctrine\DBAL\Driver\PDO\Exception
SQLSTATE[HY000] [2002] Iiaee??aiea ia onoaiiaeaii, o.e. eiia?iue eiiiu?oa? ioa
a?a cai?in ia iiaee??aiea.
at C:\wamp64\www\chords\vendor\doctrine\dbal\lib\Doctrine\DBAL\Driver\PDO\Exce
ption.php:18
14aЦХ final class Exception extends PDOException
15aЦХ {
16aЦХ public static function new(\PDOException $exception): self
17aЦХ {
az? 18aЦХ return new self($exception);
19aЦХ }
20aЦХ }
21aЦХ
1 C:\wamp64\www\chords\vendor\doctrine\dbal\lib\Doctrine\DBAL\Driver\PDOConn
ection.php:41
Doctrine\DBAL\Driver\PDO\Exception::new(Object(PDOException))
2 [internal]:0
Illuminate\Foundation\Application::Illuminate\Foundation\{closure}(Object(
App\Providers\AppServiceProvider))
Script @php artisan package:discover –ansi handling the post-autoload-dump even
t returned with error code 1
Installation failed, reverting ./composer.json to its original content.
Please check your
App\Providers\AppServiceProvider
, make sure there are no mistakes. If that doesn’t work, go toconfig/app.php
, it could be because you added the service provider for the package that is not installed in the system.This has been super helpful. Most of the documentation available is for older versions of Laravel. I’m a beginner so that has been frustrating. Thanks so much for making these tutorial using the latest version.
Just when I was doing good at understanding how Laravel works, lessons 1-3, in lesson 4 you require me to spend $99 to continue using your tutorial.
That is a show stopper. And that really is a bummer because this is the best tutorial I have found. Now I have to find another good tutorial.
Hello, sorry for the confusion but section 4 has two parts, Laravel Nova and Voyager. If you do not want to pay for Nova, you can always go for Voyager, which is a free open-source admin panel.
voyager creat user is not prompting and aborts. What do I do to fix this?
Is there an error message?
Hi Eric,
Thank you for this tutorial.
I have a problem I am not able to solve. I cannot install Voyager. I run the command “composer require tcg/voyager” in my project directory, but I keep getting the below error message:
Installing dependencies from lock file (including require-dev)
Package operations: 1 install, 0 updates, 0 removals
– Installing tcg/voyager (1.x-dev e9160b7): Cloning e9160b7c10
Cloning failed using an ssh key for authentication, enter your GitHub credentials to access private repos
Head to https://github.com/settings/tokens/new?scopes=repo&description=Composer+on+DESKTOP-8VORIAK+2020-12-31+1216
to retrieve a token. It will be stored in “C:/Users/Diana/AppData/Roaming/Composer/auth.json” for future use by Composer.
Token (hidden): Install of tcg/voyager failed
Installation failed, reverting ./composer.json and ./composer.lock to their original content.
[ErrorException]
copy(phar://C:/ProgramData/ComposerSetup/bin/composer.phar/vendor/symfony/console/Helper/../Resources/bin/hiddeninput.exe): failed to open
stream: phar error: “vendor/symfony/console/Resources/bin/hiddeninput.exe” is not a file in phar “C:/ProgramData/ComposerSetup/bin/composer
.phar”
Can you please help me? Ive looked for a solution everywhere online to no joy
It seems that the “hiddeninput.exe” is missing. Maybe you can try reinstalling composer. If that doesn’t work, it is possible that your antivirus software is blocking it.
I’ll try that. Thanks Eric
Hello,
I’m unable to install voyager. First it required a token from github which I managed to
provide and then the process aborts. it says “C:\\xamp\htdocs\blog/vendor/composer/tmp-c0af70fedf72a4b143180………….’ is not a zip archive”
Please help
You can try this command to clean up all compiled files:
composer dump-autoload
And then try again.