Macroable.php第81行中的BadMethodCallException:方法默认值不存在

时间:2017-10-12 14:22:56

标签: php laravel-5.5

我根据文档Setting Default Url Values获取BadMethodCallException从中间件设置网址的默认参数。

Bad Method Exception

这是我的代码

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,

我该如何解决?

1 个答案:

答案 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