【问题标题】:Method Illuminate\Support\Str::transliterate does not exist方法 Illuminate\Support\Str::transliterate 不存在
【发布时间】:2022-06-14 00:18:57
【问题描述】:

我正在使用:

Laravel: 9.x-dev

PHP: 8.1.5

laravel/ui: v3.4.5

将我的应用程序从 Laravel 8 更新到 Laravel 9 后,我在尝试进行身份验证时收到此错误。

它在vendor\laravel\ui\auth-backend\ThrottlesLogins.php 中引用行92

   protected function throttleKey(Request $request)

{

    return Str::transliterate(Str::lower($request->input($this->username())).'|'.$request->ip());

}

【问题讨论】:

  • 一个非常奇怪的错误.. Laravel 字符串辅助函数不包含 transliterate 函数.. 在 v9.x 和 v8.x 中都没有......在 Github 上的全文搜索显示该函数除了用于西里尔音译的俄语 Laravel 包外,在任何与 php 相关的代码中都没有提及。也许在 Laravel\Ui Github 页面上创建一个问题?
  • 您能否发布您遇到的完整错误?我的假设实际上是错误的,它不存在。只是文档中没有提到。
  • 我也很惊讶在网上其他任何地方都没有发现这个错误。这是我相信的全部错误。如果我还可以包含其他内容,请具体告诉我:
  • BadMethodCallException Method Illuminate\Support\Str::transliterate does not exist. 第一帧:Illuminate\Support\Str::__callStatic \vendor\laravel\framework\src\Illuminate\Macroable\Traits\Macroable.php:87 (throw...) public static function __callStatic($method, $parameters) { if (! static::hasMacro($method)) { throw new BadMethodCallException(sprintf( 'Method %s::%s does not exist.', static::class, $method )); }
  • 第二帧:唯一提到transliterate的位置。在throttleKey函数内的原始帖子中显示的行。

标签: php laravel


【解决方案1】:

我通过将 Laravel 从作曲家中的 dev 版本中更改为解决了这个错误。在我的情况下,从 9.x-dev9.1.5

【讨论】:

    【解决方案2】:

    解决方案

    尝试运行这个命令:

    composer update
    

    确保你导入了这个类:

    use Illuminate\Support\Str;
    

    希望对你有用

    【讨论】:

    • Laravel\Ui 类 github.com/laravel/ui/blob/… 已经包含 String 支持类。
    • 可能是这个问题,试着在你的控制器中导入它
    • 我在我的项目中尝试过它并且它有效,我正在使用 laravel 8
    • 是的,我错了。文档中没有提到音译功能。我不知道
    • 它已经导入到@Laisender 链接的文件中。我也导入了我的 LoginController 并且相同的结果仍然存在。我应该看看另一个控制器吗?
    【解决方案3】:

    只需将此代码添加到您的 LoginController.php 文件中

    /**
     * Transliterate a string to its closest ASCII representation.
     *
     * @param string $string
     * @param string $unknown
     * @param bool|null $strict
     * @return string
     */
    public static function transliterate(string $string, string $unknown = '?', bool $strict = false): string
    {
        return ASCII::to_transliterate($string, $unknown, $strict);
    }
    
    
    /**
     * Get the throttle key for the given request.
     *
     * @param Request $request
     * @return string
     */
    protected function throttleKey(Request $request): string
    {
        return self::transliterate(Str::lower($request->input($this->username())).'|'.$request->ip());
    }
    

    【讨论】:

      猜你喜欢
      • 2021-08-30
      • 2020-11-20
      • 2022-01-22
      • 2020-06-09
      • 2021-04-27
      • 2019-05-25
      • 2020-08-16
      • 2020-08-29
      • 2021-05-27
      相关资源
      最近更新 更多