我根据文档Setting Default Url Values获取BadMethodCallException
从中间件设置网址的默认参数。
这是我的代码
Class SetDefaultLocaleForUrls
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Support\Facades\URL;
class SetDefaultLocaleForUrls
{
public function handle($request, Closure $next)
{
$locale = $request->route()->parameter('locale');
$site_locales = ['en','es','fr','de','zh','tw','nl','pt'];
if(!empty($locale) && !in_array($locale,$site_locales)){
$locale = 'en';
}
if (empty($locale)) {
$locale = 'en'; //default locale
}
if (empty($locale)) {
$locale = 'en'; //default locale
}
URL::defaults(['locale' => $locale]);
return $next($request);
}
}
我的路线配置
Route::get('/{locale?}/about-us', ['as' => 'frontend.about-us.localized', 'uses' => 'Frontend\AboutUsController@index'])->middleware('locale');
受保护的$ routeMiddleware中的我的中间件配置
'locale' => \App\Http\Middleware\SetDefaultLocaleForUrls::class,
我该如何解决?
答案 0 :(得分:0)
仔细检查路由中间件中的命名空间和使用语句:
export interface SelectAddress {
id: string;
number: string;
line1: string;
postcode: string;
}
export type SelectAddress = {
id: string;
number: string;
line1: string;
postcode: string;
}
我已将您的代码放入Laravel的实例中,并且我没有收到任何错误。 PHPStorm报告<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Support\Facades\URL;
class SetDefaultLocaleForUrls
{
public function handle($request, Closure $next)
{
URL::defaults(['locale' => $request->user()->locale]);
return $next($request);
}
}
,但它不会导致BadMethodCallException,因此我认为这仅适用于我的PHPStorm配置。
在Method 'defaults' not found in \Illuminate\Support\Facades\URL
课程中,我添加了
SetDefaultLocaleForUrls
根据我输入的URL,这在我的视图中显示数据时是正常的。这是在我的视图中使用检查,例如:
app()->setLocale($locale);
但是,如果我输入的网址不在@if (App::isLocale('de'))
<h1>Guten Morgen</h1>
@else
<h1>Good Morning</h1>
@endif
数组中,则不会像我预期的那样更新网址。但是,它会将区域设置设置为您的默认$site_locales
并在视图中显示正确的数据。
该方法是否旨在重写URL?
您可以尝试与BadMethodCallException相关的一件事是清除您的路由缓存:
en