Dashboards

Overview

Nova dashboards provide a way of grouping similar information provided by metrics or cards.

Default Dashboard

Nova ships with a default dashboard which pulls cards and metrics from the cards method defined in app/Providers/NovaServiceProvider. More information about Dashboard Metrics can be found here.

Defining Dashboards

Custom dashboards may be generated using the nova:dashboard Artisan command. By default, all new dashboards will be placed in the app/Nova/Dashboards directory:

php artisan nova:dashboard UserInsights

Once your dashboard class has been generated, you're ready to customize it. Each dashboard metric class contains a cards method. This method should return an array of card or metric classes:

<?php

namespace App\Nova\Dashboards;

use Laravel\Nova\Dashboard;
use App\Nova\Metrics\TotalUsers;
use App\Nova\Metrics\UsersOverTime;

class UserInsights extends Dashboard
{
    /**
     * Get the cards for the dashboard.
     *
     * @return array
     */
    public function cards()
    {
        return [
            new TotalUsers,
            new UsersOverTime,
        ];
    }
}

Customizing Dashboards

By default, Nova will use the class name as the name of your dashboard. You may customize the name of the dashboard displayed in the navigation bar by overriding the label method within your dashboard class:

/**
 * Get the displayable name of the dashboard.
 *
 * @return string
 */
public static function label()
{
    return 'User Insights';
}

If you need to change the URI key of the dashboard that is used by Nova, you may override the uriKey method:

/**
 * Get the URI key of the dashboard.
 *
 * @return string
 */
public static function uriKey()
{
    return 'user-insights-improved';
}

Registering Dashboards

To register a dashboard, add the dashboard to the array returned by the dashboards method of your app/Providers/NovaServiceProvider class:

use App\Nova\Dashboards\UserInsights;

/**
 * Get the extra dashboards that should be displayed on the Nova dashboard.
 *
 * @return array
 */
protected function dashboards()
{
    return [
        new UserInsights,
    ];
}

Authorization

If you would like to only expose a given dashboard to certain users, you may chain the canSee method on to your dashboard registration. The canSee method accepts a Closure which should return true or false. The Closure will receive the incoming HTTP request:

use App\User;

/**
 * Get the extra dashboards that should be displayed on the Nova dashboard.
 *
 * @return array
 */
protected function dashboards()
{
    return [
        (new Dashboards\UserInsights)->canSee(function ($request) {
            return $request->user()->can('viewUserInsights', User::class);
        }),
    ];
}

In the example above, we are using Laravel's Authorizable trait's can method on our User model to determine if the authorized user is authorized for the viewUserInsights action. However, since proxying to authorization policy methods is a common use-case for canSee, you may use the canSeeWhen method to achieve the same behavior. The canSeeWhen method has the same method signature as the Illuminate\Foundation\Auth\Access\Authorizable trait's can method:

use App\User;

/**
 * Get the extra dashboards that should be displayed on the Nova dashboard.
 *
 * @return array
 */
protected function dashboards()
{
    return [
        (new Dashboards\UserInsights)->canSeeWhen('viewUserInsights', User::class),
    ];
}