【问题标题】:BaseHelper not found LaravelBaseHelper 未找到 Laravel
【发布时间】:2021-07-13 23:45:07
【问题描述】:

几周后,我不得不从事一个 Laravel 项目(我以前从未做过)。

当我尝试输入 /user/create 时出现错误:

Symfony\Component\Debug\Exception\FatalThrowableError
Class 'BaseHelper' not found 

带有指向试图调用此函数的 UserController 文件的链接:

\BaseHelper::checkLimit('user'))

所以我尝试在use App\Base\Base 之后的UserController.php 中包含BaseHelper 和一个use App\Base\Helpers\BaseHelper,在use Base 之后的use Base 之后包含一个use BaseHelperUserController 类的开头。

所以我的代码如下所示:

use App\Base\Base;
use App\Base\Helpers\BaseHelper;

...

class UserController extends Controller
{
    use Base;
    use BaseHelper;

    ...

    public function create()
    {

    ...

    if (User::count() >= \BaseHelper::checkLimit('user')) return redirect(url('user'))->with('danger', 'License limit reached (' . User::count() . '/' . \BaseHelper::checkLimit('user') . ')');

    return view('base::user.create');
    }

...

}

但是现在出现了这个错误:app\Base\Controllers\UserController cannot use App\Base\Helpers\BaseHelper - it is not a trait

正如我之前提到的,我对 Laravel 几乎一无所知,并且仍在学习很多东西,所以我不知道我一开始是否做对了,以及后来如何修复这个新错误。

【问题讨论】:

  • 这不是 Laravel 问题,而是 PHP 问题。如果您使用的是use App\Base\Helpers\BaseHelper;,那么您不应该使用\BaseHerlper,只需使用BaseHelper 而不使用/。其次,这真的是一种特质吗? IE。 trait BaseHelper { ... }。如果是这样,那么您可以通过use BaseHelper 包含它,然后调用checkLimit('user') 之类的函数。如果它只是一个具有static 函数checkLimit() 的类,那么您删除use BaseHelper; 并执行BaseHelper::checkLimit()

标签: php laravel user-management


【解决方案1】:

我认为您混淆了导入和特征。

导入通常在文件开头完成,您似乎做得正确:

use App\Base\Base;
use App\Base\Helpers\BaseHelper;

特征在类中,是一个完全不同的概念。例如

class User extends Model
{
    use Authenticatable;
}

见: https://www.php.net/manual/en/language.oop5.traits.php 了解什么是特征。

我假设BaseHelper 是一个类,而不是一个特征。

所以不要在控制器中包含以下内容:

use BaseHelper;

还有

\BaseHelper 应该是BaseHelper

正确的代码应该是:

use App\Base\Base;
use App\Base\Helpers\BaseHelper;

...

class UserController extends Controller
{
    use Base; // I don't know if this is a trait
    // use BaseHelper; // REMOVE

    public function create()
    {

    ...

    if (User::count() >= BaseHelper::checkLimit('user'))
        return redirect(url('user'))->with('danger', 'License limit reached (' . User::count() . '/' . BaseHelper::checkLimit('user') . ')');

    return view('base::user.create');
    }

...

}

【讨论】:

  • \BaseHelper::checkLimit 也应该是 BaseHelper::checkLimit,因为它是在文件开头导入的。
  • 你的意思是在文件的开头吗?当我将use App\Base\Helpers\BaseHelper; 更改为use BaseHelper; 时,错误从app\Base\Controllers\UserController cannot use App\Base\Helpers\BaseHelper - it is not a trait 更改为Trait 'BaseHelper' not found 同样适用于从课程开头删除use BaseHelper;
  • @user14692598 不,我的意思是在UserController 部分之后
  • 改变这两个都是为我做的,谢谢大家,现在 checkLimit 函数没有定义,但我想现在编程这是我的职责
猜你喜欢
  • 2014-05-28
  • 2018-05-03
  • 2020-08-22
  • 2016-11-14
  • 2021-03-21
  • 2017-07-17
  • 2019-10-20
  • 2019-08-10
  • 2021-02-27
相关资源
最近更新 更多