将 Laravel 从 5.6 升级到 6.0 后,调用未定义的 str_random() 函数不起作用

Posted

技术标签:

【中文标题】将 Laravel 从 5.6 升级到 6.0 后,调用未定义的 str_random() 函数不起作用【英文标题】:After upgrading Laravel from 5.6 to 6.0, Call to undefined str_random() function not working 【发布时间】:2020-01-29 11:36:18 【问题描述】:

我已将 Laravel 从 5.6 升级到 6.0。以前,默认帮助函数在控制器上运行良好,但现在它显示“undefined”。在我的控制器中,我使用了以下内容。

$filename = str_random(12);

我收到以下错误。

消息:“调用未定义的函数 应用\Http\Controllers\str_random()"

我也用过random() 函数,它的意思是一样的。

有人可以指导我怎么做吗?

我已经运行了类似的命令:

composer dump-autoload

但我得到了同样的错误。

【问题讨论】:

就我而言,str_random() 已在 5.8 中删除,看起来根本不受支持。试试这个:laravel.com/docs/6.x/helpers#method-str-random 能否请您在文档中的哪个位置发布“这些功能”仍受支持? laravel.com/docs/6.x/helpers#method-str-random 说是Str::random() @kerbholz : 你好先生,我很抱歉,我已经看到 5.6 文档代替 6.0 现在我已经拉下顶部选择框并将版本设置为 6.0,我看不到你有什么写的是对的 【参考方案1】:

影响的可能性:高Laravel 6 Upgrade Guide

在 Laravel 6 中,所有 str_array_ 助手都已移至新的 laravel/helpers Composer 包并从框架中删除。如果需要,您可以更新对这些帮助程序的所有调用以使用 Illuminate\Support\StrIlluminate\Support\Arr 类。或者,您可以将新的 laravel/helpers 包添加到您的应用程序以继续使用这些帮助程序:

composer require laravel/helpers

如果不想添加 Package,则使用 StrArr 类。

例如:

Str::random(12)

https://laravel.com/docs/master/helpers#method-str-random

【讨论】:

Str::replace 不存在,而是我可以使用什么?如果我想替换为? 使用内置的str_replace函数,否则按照我的回答。【参考方案2】:

添加以下字符串库。

use Illuminate\Support\Str;

现在你可以像下面这样使用它了。

$filename = Str::random(40)

或者,安装以下软件包。

composer require laravel/helpers

【讨论】:

【参考方案3】:

在我的例子中,我没有在我的应用程序代码中使用任何字符串助手,所以我只需要删除已编译的类文件:

php artisan clear-compiled

【讨论】:

【参考方案4】:

使用代码::

<?php

namespace App\Http\Controllers;

use Exception;
use Illuminate\Support\Str;
use Illuminate\Support\Arr;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;



   public function index()
    
        $count=15;
        try 
            DB::statement('truncate users');
            DB::beginTransaction();
            while ($count--)
                $id = DB::table('users')->insertGetId( [
                    'name'=>'Sample'.$count,
                    'password'=>random_int(1000000,99999999)
                ]);
                foreach (range(1,rand(1,3)) as $index )
                    DB::insert('INSERT INTO posts (userid,title,body) VALUES (:userid,:title,:body)',[
                            'userid'=>$id,
                            'title'=>str::random(15),
                            'body'=>str::random(50),
                        ]);
                
                DB::commit();
            
        catch (\Exception $errors)
            DB::rollBack();
            Log::error($errors);
            return "mission filed";
        
    

【讨论】:

冗余代码太多,抱歉。

以上是关于将 Laravel 从 5.6 升级到 6.0 后,调用未定义的 str_random() 函数不起作用的主要内容,如果未能解决你的问题,请参考以下文章

laravel 从 5.6 作曲家升级到 5.7 不起作用

将 Laravel 5.5 升级到 5.6 错误

Laravel 5.6:升级 composer.json 后调用未定义的方法 ...\Store::getToken()

将 mysql 从 5.6 升级到 5.7 后“在用户表中找不到任何匹配的行”

升级 Laravel 5.6 的 Envoyer 部署失败引用不匹配的 PHP 版本

将 Laravel 5.4 升级到最新版本 (5.7)