未找到 Laravel 自定义特征

问题描述 投票:0回答:8

我对特质很陌生,但我想尝试一下。但是,似乎无法加载。

我在 Laravel 应用程序目录下的文件夹中创建了一个名为 CheckPermsAgainstObjectTrait.php 的特征:app\Helpers

这是特征代码:

<?php
namespace App\Helpers;

trait CheckPermsAgainstObjectTrait {
    function something{}
}

我尝试在控制器中使用它:

<?php

namespace App\Http\Controllers;

use this&that;
use App\Helpers\CheckPermsAgainstObjectTrait;

class PolicyController extends Controller{

   use CheckPermsAgainstObjectTrait;
}

该目录中的类加载良好。 PHPStorm 认为这个特性很好。我已经清除编译了 aritsan 并转储了自动加载。我猜 Laravel 不喜欢命名空间?我希望我不需要在作曲家中进行任何手动加载——但我很难找到任何文档来提示我搞砸了什么。

错误:

FatalErrorException in PolicyController.php line 15: 
Trait 'App\Helpers\CheckPermsAgainstObjectTrait' not found

有什么想法吗?

php laravel namespaces traits
8个回答
25
投票

您转储自动加载文件了吗?

composer dump-autoload

16
投票

我的答案是,由于以 Laravel 特征为例,我的特征文件顶部的命名空间错误。如果您的特征位于

App/Traits/MyTrait.php
中,请确保您的命名空间是:

namespace App\Traits;

trait MyTrait
{
    // ..
}

然后从包含特征的文件中:

use App\Traits\MyTrait;

class MyClass
{
    use MyTrait;

    // ..
}

无需搞乱

config/app.php
composer.json
或自动加载。


3
投票

我遇到了一个非常类似的问题,在使用

Trait 'Tests\CreatesApplication' not found in '.../my_project/tests/TestCase.php' on line 9
运行测试时出现错误
phpunit
,因为我手动更新了我的 Laravel 项目,并且肯定错过了一些更改。这也可能发生在任何在唯一命名空间中创建特征或类的人身上。

无论如何,@Devon 对原始问题的评论为我指明了正确的方向。

我的

composer.json
文件中缺少所需的自动加载器配置,因此我从 Laravel github 存储库 检查了我的 Laravel 版本(本例中为 5.4)的配置。

在这种情况下,我没有从

App\
中的命名空间调用(它已经在
composer.json
中。)

这是我在

composer.json
中缺少的内容:

{
    ...,
    "autoload-dev": {
        "psr-4": {
            "Tests\\": "tests/"
        }
    },
    ...
}

感谢德文郡!希望这可以防止其他人拔掉头发。


2
投票
composer dumpautoload -o

这对我有用


0
投票

当您的 Trait 文件名拼写错误或类名不正确时,有时可能会发生这种情况。请检查您的文件名是否与类名相同


0
投票

当您的 Trait 文件名拼写错误或类名不正确时,有时可能会发生这种情况。请检查您的文件名是否与类名相同


0
投票

如果您复制并粘贴了特征,那么它可能不起作用,您要做的就是删除特征文件夹并手动创建它,然后删除特征类并手动创建它。 (通过打字),然后确保班级的第一个字母以大写字母开头。在那里它必须起作用。


0
投票

在 PHPStorm 中启用 PSR 后,我遇到了同样的问题。原因是,在我将项目目录标记为源根目录后,IDE 自动用小写字母

app
而不是
App
填充我的用途(因为目录是
app/...

我必须改变:

namespace app\Http\Traits;

至:

namespace App\Http\Traits;
© www.soinside.com 2019 - 2024. All rights reserved.