【问题标题】:How to override an app route from a package in Laravel 6如何从 Laravel 6 中的包中覆盖应用程序路由
【发布时间】:2020-03-26 10:08:04
【问题描述】:

我正在尝试为 Laravel 6 创建一个作曲家包,但我无法让我的主路由 / 覆盖基本 Laravel 安装中包含的默认 / 路由。

当我注释掉 laravel 提供的基本 / 路由时,我的包路由确实有效,因此它正在被包注册。

如果我在 config/app.php 文件中的 RouteServiceProvider 之前或之后包含我的包的服务提供者,这并没有什么不同。

我在这里缺少什么?如何确保我的包裹路线具有优先权?

以下是相关的代码:

config/app.php

/*
 * Application Service Providers...
 */
App\Providers\AppServiceProvider::class,
App\Providers\AuthServiceProvider::class,
// App\Providers\BroadcastServiceProvider::class,
App\Providers\EventServiceProvider::class,
Wheelmaker\LaravueSpa\LaravueSpaServiceProvider::class,  // MY SERVICE PROVIDER
App\Providers\RouteServiceProvider::class,

LaravueSpaServiceProvider的相关栏目

public function boot()
{
  $this->loadRoutesFrom(__DIR__.'/routes/web.php');
  ...
}

我的包裹的web.php 路由文件:

<?php
Route::get('/', function(){
  $initData = [
    'appName' => config('app.name'),
    'user' => Auth::user(),
];
  return view('laravue-spa::app', compact('initData'));
})->middleware(['web']);

【问题讨论】:

  • 包含在文档中,让他们不要为“/”定义自己的路由,或者为“/”指向您的控制器......并且您的包不应该定义基于闭包路线,如果你这样做,他们将无法缓存他们的路线
  • @lagbox 感谢关闭路线的提示。默认的 Laravel 安装有一个 / 路由,所以我希望覆盖它,但如果我必须在安装说明中包含删除它,那么我会这样做。
  • 这是他们的路线和他们的应用程序,默认情况下只是为了示例目的
  • @lagbox 它实际上是一个用于创建单页应用程序的包,因此除了将默认文件注释掉之外,他们永远不需要触及路由文件,但我明白你的意思。

标签: php laravel oop composer-php laravel-6


【解决方案1】:

这可能晚了,但对于其他人来说:

您可以要求用户在其composer.json 中禁用自动包发现,然后在config/app.php 中的RouteServiceProvider 之前手动注册包的Service Provider

【讨论】:

    猜你喜欢
    • 2017-11-27
    • 2011-09-12
    • 1970-01-01
    • 1970-01-01
    • 2016-09-30
    • 2015-05-04
    • 1970-01-01
    • 2021-11-03
    • 1970-01-01
    相关资源
    最近更新 更多