Laravel路线出现故障



我在Laravel/Livewire项目中遇到了一些问题。我做这个项目已经有一段时间了,一切似乎都很顺利。

该项目分为2个路线文件;一个用于普通用户,一个用于仪表板。

这是仪表板路由文件:

<?php
use IlluminateSupportFacadesRoute;
use AppHttpLivewireDashboardWelcome;
use AppHttpLivewireDashboardBusiness;
use AppHttpLivewireDashboardSubscription;
use AppHttpLivewireDashboardPepe;
use IlluminateHttpRequest;

Route::get('/', Welcome::class)->name('dashboard.index');
Route::get('/business', Business::class)->name('dashboard.business');
Route::get('/subscription', Subscription::class)->name('dashboard.subscription');

Route::get('/user/invoice/{invoice}', function (Request $request, $invoiceId) {
return $request->user()->downloadInvoice($invoiceId, [
'vendor' => 'Your Company',
'product' => 'Your Product',
]);
});

这是客人的路线文件:

<?php
use IlluminateSupportFacadesRoute;
use AppHttpLivewireShowBusiness;
use AppHttpLivewireShowBusinesses;
use AppHttpLivewireShowCategories;

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/
Route::get('/', function () {
return view('welcome');
});

Route::get('/categorias', ShowCategories::class)->name('show.categories');
Route::get('/{category}', ShowBusinesses::class)->name('show.businesses');
Route::get('/{category}/{business}', ShowBusiness::class)->name('show.business');

(两者都在RouteServiceProvider上正确注册(:

<?php
namespace AppProviders;
use IlluminateCacheRateLimitingLimit;
use IlluminateFoundationSupportProvidersRouteServiceProvider as ServiceProvider;
use IlluminateHttpRequest;
use IlluminateSupportFacadesRateLimiter;
use IlluminateSupportFacadesRoute;
class RouteServiceProvider extends ServiceProvider
{
/**
* The path to the "home" route for your application.
*
* This is used by Laravel authentication to redirect users after login.
*
* @var string
*/
public const HOME = '/dashboard';
/**
* The controller namespace for the application.
*
* When present, controller route declarations will automatically be prefixed with this namespace.
*
* @var string|null
*/
// protected $namespace = 'App\Http\Controllers';
/**
* Define your route model bindings, pattern filters, etc.
*
* @return void
*/
public function boot()
{
$this->configureRateLimiting();
$this->routes(function () {
Route::prefix('api')
->middleware('api')
->namespace($this->namespace)
->group(base_path('routes/api.php'));
Route::middleware('web')
->namespace($this->namespace)
->group(base_path('routes/web.php'));
Route::middleware('web', 'auth')
->prefix('dashboard')
->namespace($this->namespace)
->group(base_path('routes/dashboard.php'));
});
}
/**
* Configure the rate limiters for the application.
*
* @return void
*/
protected function configureRateLimiting()
{
RateLimiter::for('api', function (Request $request) {
return Limit::perMinute(60)->by(optional($request->user())->id ?: $request->ip());
});
}
}

问题是,今天我像以前一样打开我的项目,当我试图访问仪表板时,我会看到一个404页面。此外,我不能创建任何新的路线,因为它们不起作用。

我认为这个问题与Apache或与路由相关的东西有关,因为Laravel创建的Auth中间件不起作用。

此外,我不知道这是否有任何帮助:我的视图文件夹上有两个布局文件。我打电话给其中一个在仪表板路线上,另一个在客人视图上。如果我这样做,来宾视图可以正常工作,但仪表板视图返回404。如果我使用->layout方法只在仪表板路由中,并从来宾视图中删除该方法,Laravel加载布局,但不加载内容。

<?php
namespace AppHttpLivewireDashboard;

use LivewireComponent;

class Business extends Component{
protected $listeners = ['render'];

public function render(){
return view('livewire.dashboard.business')->layout('layouts.app');
}
}

我还清除了我的路线、应用程序和浏览器中的缓存,这就是我的.htaccess:

<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews -Indexes
</IfModule>
RewriteEngine On
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [L,R=301]
# Send Requests To Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>

这是我的C:\examplep\apache\conf\extra\httpd-vhosts.conf:

<VirtualHost *>
DocumentRoot "C:xampphtdocs"
ServerName localhost
</VirtualHost>

<VirtualHost *>
DocumentRoot "C:xampphtdocselportaldesalamancapublic"
ServerName elportaldesalamanca.test
<Directory "C:xampphtdocselportaldesalamancapublic">
Options All
AllowOverride All
Require all granted
</Directory>
</VirtualHost>

RouteServiceProvider中,尝试更改路线顺序。web必须是最后一个。

/**
* Define your route model bindings, pattern filters, etc.
*
* @return void
*/
public function boot()
{
$this->configureRateLimiting();
$this->routes(function () {
Route::prefix('api')
->middleware('api')
->namespace($this->namespace)
->group(base_path('routes/api.php'));
Route::middleware('web', 'auth')
->prefix('dashboard')
->namespace($this->namespace)
->group(base_path('routes/dashboard.php'));

Route::middleware('web')
->namespace($this->namespace)
->group(base_path('routes/web.php'));
});
}

因为你的web.php中有一条路线需要在你的路线列表中最后一条。这条路线抓住了你的"/仪表板";作为类别并返回404,因为您没有";仪表板";类别

Route::get('/{category}', ShowBusinesses::class)->name('show.businesses');

最新更新