logo

安装

要求

在安装之前,Laravel Nova 有些要求,需要你注意一下:

  • Composer
  • Laravel Framework 8.x, 9.x, or 10.x
  • Laravel Mix 6
  • Node.js (Version 14.x+)
  • NPM 9

浏览器支持

Nova 支持以下浏览器的现代版本:

  • Apple Safari
  • Google Chrome
  • Microsoft Edge
  • Mozilla Firefox

使用 Composer 安装 Nova

Zip 下载

以前发布的 Laravel Nova 版本支持下载源码 zip 压缩包来安装; 但是, Nova 4 开始只能通过 Composer 安装。

你可以通过我们的私人 Satis 存储库将 Nova 安装为 Composer 软件包. 请将 Nova 存储库添加到应用程序的 composer.json 文件里面:

json
"repositories": [
    {
        "type": "composer",
        "url": "https://nova.laravel.com"
    }
],

或者,您可以使用以下 CLI 命令将 Composer 存储库添加到 composer.json 文件里面:

bash
composer config repositories.nova '{"type": "composer", "url": "https://nova.laravel.com"}' --file composer.json

接下来,你可以添加 laravel/nova 作为必须的包到 composer.json 文件里面:

json
"require": {
    "php": "^8.1",
    "laravel/framework": "^10.0",
    "laravel/nova": "^4.0"
},

修改 composer.json 文件以后, 在控制台终端运行命令行 composer update :

bash
composer update --prefer-dist

运行 composer update 以后, 系统将提示您提供用户名和密码。你应该使用 Nova 网站上注册的电子邮件作为「用户名」和一个 授权码 作为「密码」。这些凭据将验证你的 Composer 会话是否具有下载 Nova 源代码的权限。

为了避免手动键入这些凭据,您可以创建 Composer auth.json 文件 然后使用 授权码 代替您的密码:

bash
composer config http-basic.nova.laravel.com [email protected] your-license-key

最后,运行 nova:installmigrate Artisan 命令. nova:install 命令将在你的应用中安装 Nova 的服务提供者,并发布资源文件:

bash
php artisan nova:install

php artisan migrate

运行完以上命令后,请确认 App\Providers\NovaServiceProvider 被添加到了 providers 数组内 在你的 config/app.php 配置文件里。如果没有,请手动添加。 当然,如果你的应用不使用 App 命名空间,你应该按需更新该服务提供者的类名。

默认的 App\Nova\User 资源引用了 App\Models\User 模型。如果你的模型放在别的目录或命名空间,请在资源中调整此值:

php
public static $model = 'App\\Models\\User';

如果你的 users 表中还没有 Nova 管理员用户,你可以通过运行 nova:user Artisan 命令并按照提示添加一个管理员:

bash
php artisan nova:user

好的!接下来,你可以在浏览器中访问应用的 /nova 路径,然后你会看到 Nova 管理面板,其中包含指向本文档各部分的链接。

注册 Nova 许可证密钥和域名 URL

Nova 需要在生产环境中使用许可证密钥和域名 URL。Nova 将根据您 Nova 帐户中的许可证详细信息中的值检查您的许可证密钥和当前域名。

您可以在 Nova 帐户的许可证页面中生成许可证密钥并注册项目的域名 URL,网址为 https://nova.laravel.com/licenses:

Registering your production site

通配符子域名

您可以为域名 URL 注册通配符子域,以便在多租户场景中使用 (例如 *.laravel.com)。

你可以通过在 config/nova.php 配置文件中设置 license_key 选项来注册许可证密钥:

php
'license_key' => env('NOVA_LICENSE_KEY', ''),

验证 Nova 许可证密钥配置

要验证所有配置是否正确,应运行 nova:check-license 命令:

bash
php artisan nova:check-license

在 CI 环境中验证 Nova

不建议将 Composer auth.json 文件存储在项目的源代码管理存储库中。但是,有时你可能希望在像CodeShip 这样的 CI 环境中下载 Nova。例如,您可能希望为您创建的任何自定义工具运行测试。

要在这些情况下验证 Nova,你可以使用 Composer 的 config 命令在 CI 系统的管道中设置配置选项,注入包含 Nova 用户名和许可证密钥的环境变量:

bash
composer config http-basic.nova.laravel.com "${NOVA_USERNAME}" "${NOVA_LICENSE_KEY}"

在开发和临时测试域名使用 Nova

由于 Nova 可以在本地和测试开发环境中使用,因此 Nova 在 localhost 或像IETF RFC 2606中指定的本地 TLD(域名后缀) 上使用时不会检查您的许可证密钥:

  • .test
  • .example
  • .invalid
  • .localhost
  • .local

当子域名是这些常用的测试子域之一时,Nova 也不会检查当前的许可证密钥:

  • staging.
  • stage.
  • test.
  • testing.
  • dev.
  • development.

授权访问 Nova

在你的 app/Providers/NovaServiceProvider.php 文件中,有一个 gate 方法。此授权 gate 控制了 非本地 环境对 Nova 的访问。默认当应用环境是 local 时,任何人都可以访问 Nova 面板。你可以按需自由修改此 gate 方法,以限制对 Nova 的访问:

php
/**
 * 注册 Nova gate.
 *
 * 此 gate 决定了谁可以在非本地环境访问 Nova.
 *
 * @return void
 */
protected function gate()
{
    Gate::define('viewNova', function ($user) {
        return in_array($user->email, [
            '[email protected]',
        ]);
    });
}

自定义

品牌标识

尽管 Nova 的界面是由 Nova 管理的应用程序的一个独立部分,但你可以对 Nova 使用的品牌徽标和颜色进行一些小的自定义,以使界面与应用程序的其他部分更有凝聚力。

Branding

要自定义 Nova 界面左上角使用的徽标,您可以在应用程序的 config/nova.php 配置文件中为 brand.logo 配置项指定配置值。此配置值应包含要使用的徽标的 SVG 文件的绝对路径:

php
'brand' => [
    'logo' => resource_path('/img/example-logo.svg'),

    // ...
],

SVG 大小

你可能需要通过修改 SVG 文件本身的宽度来调整 SVG 徽标的大小和宽度。

品牌颜色

要自定义 Nova 界面中用作「主」颜色的颜色,你可以在应用程序的 config/nova.php 配置文件中为brand.colors 配置项指定一个值。该颜色将用作主按钮颜色,以及整个 Nova 界面中各种强调项目的颜色。此配置值应为有效的 RGB,RGBA 或 HSL 字符串值:

php
'brand' => [
    // ...

    'colors' => [
        "400" => "24, 182, 155, 0.5",
        "500" => "24, 182, 155",
        "600" => "24, 182, 155, 0.75",
    ]
],

自定义 Nova 的页脚

有时,你可能希望自定义 Nova 的默认页脚文本,以包含用户的相关信息,如你的应用程序版本、IP地址或其他信息。使用 Nova::footer 方法,你可以自定义 Nova 的页脚文本。通常,footer 方法应在应用程序的App\Providers\NovaServiceProvider 类的 boot 方法中调用:

php
use Laravel\Nova\Nova;
use Illuminate\Support\Facades\Blade;

/**
 * 启动任何应用程序服务.
 *
 * @return void
 */
public function boot()
{
    parent::boot();

    Nova::footer(function ($request) {
        return Blade::render('
            @env(\'prod\')
                This is production!
            @endenv
        ');
    });
}

自定义 Nova 的身份验证看守器

Nova 使用 auth 配置文件中定义的默认身份验证看守器。如果你想自定义此看守器,可以在 Nova 的配置文件中设置 guard 值:

php
'guard' => env('NOVA_GUARD', null),

自定义 Nova 的密码重置功能

Nova 使用 auth 配置文件中定义的默认密码重置代理。如果你想自定义这个代理,你可以在 Nova 的配置文件中设置 passwords 值:

php
'passwords' => env('NOVA_PASSWORDS', null),

自定义 Nova 的文件存储驱动磁盘

Nova 使用 filesystems 配置文件中定义的默认文件存储驱动磁盘。如果你想自定义此磁盘,可以在 Nova 的配置文件中设置 storage_disk 值:

php
'storage_disk' => env('NOVA_STORAGE_DISK', 'public'),

自定义 Nova 的初始路径

访问 Nova 时,通常默认加载 Main 面板。但是,你可以自定义一个不同的初始路径,该路径应使用 Nova 的initialPath 方法加载。通常,此方法可以从 App\Providers\NovaServiceProvider 服务提供商的 register 方法调用:

php
use Laravel\Nova\Nova;

/**
 * 注册任何应用程序服务.
 *
 * @return void
 */
public function register()
{
    Nova::initialPath('/resources/users');

    // ...
}

除了字符串路径之外,initialPath 方法还接受一个闭包,该闭包返回应加载的路径。这允许你根据传入请求动态确定初始路径:

php
use Laravel\Nova\Nova;

/**
 * 注册任何应用程序服务.
 *
 * @return void
 */
public function register()
{
    Nova::initialPath(function ($request) {
        return $request->user()->initialPath();
    });

    // ...
}

启用面包屑

如果你希望 Nova 在导航 Nova 仪表板时显示 "面包屑" 菜单,你可以调用 Nova::withBreadcrumbs 方法。此方法应在应用程序的 App\Providers\NovaServiceProvider 类的 boot 方法中调用:

php
use Laravel\Nova\Nova;

/**
 * 启动任何应用程序服务.
 *
 * @return void
 */
public function boot()
{
    parent::boot();

    Nova::withBreadcrumbs();
}

withBreadcrumbs 方法还接受一个闭包,该闭包允许你为特定用户或其他自定义场景启用面包屑:

php
use Laravel\Nova\Http\Requests\NovaRequest;
use Laravel\Nova\Nova;

Nova::withBreadcrumbs(function (NovaRequest $request) {
    return $request->user()->wantsBreadcrumbs();
});

启用RTL支持启用 RTL 支持(从右到左)

如果你希望 "从右到左"(RTL)显示 Nova 的内容,你可以通过从 App\Providers\NovaServiceProvider 服务提供商调用 enableRTL 方法来启用此功能:

php
use Laravel\Nova\Nova;

/**
 * 启动任何应用程序服务.
 *
 * @return void
 */
public function boot()
{
    parent::boot();

    Nova::enableRTL();
}

enableRTL 方法还接受一个闭包,该闭包允许你为特定用户或在其他自定义场景中启用 RTL 支持:

php
use Illuminate\Http\Request;
use Laravel\Nova\Nova;

Nova::enableRTL(fn (Request $request) => $request->user()->wantsRTL());

禁用 Nova 的主题切换

如果你希望完全隐藏 Nova 的明亮/暗黑模式切换器,而让 Nova 只遵守系统偏好,您可以从 App/Providers/NovaServiceProvider 中调用 withoutThemeSwitcher 方法:

php
use Laravel\Nova\Nova;

/**
 * 启动任何应用程序服务.
 *
 * @return void
 */
public function boot()
{
    parent::boot();

    Nova::withoutThemeSwitcher();
}

错误报告

Nova 使用自己的内部异常处理程序,而不是使用默认的 App\Exceptions\ExceptionHandler。如果你需要将第三方错误报告工具与 Nova 安装集成,则应使用 Nova::report 方法。通常,应该从应用程序的 App\Providers\NovaServiceProvider 类的 register 方法调用此方法:

php
use Laravel\Nova\Nova;

Nova::report(function ($exception) {
    if (app()->bound('sentry')) {
        app('sentry')->captureException($exception);
    }
});

更新 Nova

要更新已安装的 Nova 版本,需要运行命令 composer update :

bash
composer update

更新 Nova 资源

在更新到新的 Nova 版本后,你应该确保使用 Nova:publish Artisan 命令更新 Nova 的 JavaScript 和 CSS 资源,并使用 view:clear Artisan 命令清除缓存。这将确保最新更新的 Nova 版本使用 Nova 资源和视图的最新版本:

bash
php artisan nova:publish
php artisan view:clear

nova:publish 命令将重新发布 Nova 的公共资源、配置、视图和语言文件。此命令不会覆盖任何现有的配置、视图或语言文件。如果希望该命令覆盖现有文件,可以在执行该命令时使用 --force 标志:

bash
php artisan nova:publish --force

自动更新 Nova 资源

为了确保 Nova 的资源在下载新版本时得到更新,您可以在项目的 composer.json 文件中添加一个Composer 钩子,以自动发布 Nova 的最新资源:

json
"scripts": {
    "post-update-cmd": [
        "@php artisan nova:publish"
    ]
}

代码分发

Nova 的许可证不允许公开发布其源代码。因此,你不能在使用 Nova 构建应用程序以后,通过开源存储库托管平台或任何其他代码分发平台公开该应用程序。

如果你想开发一个增强 Nova 功能的第三方软件包,你可以自由开发。但是,你不能将 Nova 源代码与你的软件包一起分发。