未找到Laravel自定义特性

ubby3x7f  于 2023-02-17  发布在  其他
关注(0)|答案(6)|浏览(152)

我是新来的特性,但我想我会给它一个尝试。但是,它似乎没有加载。
我在Laravel应用程序目录下的一个文件夹中创建了一个trait:应用程序\名为CheckPermsAgainstObjectTrait.php的帮助程序
下面是特征代码:

<?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;
}

类在那个目录下加载的很好。PHPSorm看到了这个特点。我已经编译了aritsan并转储了autoload。我猜Laravel不喜欢命名空间的某些地方?我希望我不需要在composer中进行任何手动加载--但是我很难找到任何文档来给我提示我搞砸了什么。
错误:

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

有什么想法吗?

vsmadaxz

vsmadaxz1#

是否转储了自动加载文件?

composer dump-autoload
m1m5dgzv

m1m5dgzv2#

我的答案是,我的trait文件顶部的名称空间是错误的,因为我使用了一个Laravel trait作为例子。如果你的trait在App/Traits/MyTrait.php中,那么确保你的名称空间是:

namespace App\Traits;

trait MyTrait
{
    // ..
}

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

use App\Traits\MyTrait;

class MyClass
{
    use MyTrait;

    // ..
}

不需要搞砸config/app.phpcomposer.json或自动加载。

j8ag8udp

j8ag8udp3#

我遇到过一个非常类似的问题,在使用phpunit运行测试时得到错误Trait 'Tests\CreatesApplication' not found in '.../my_project/tests/TestCase.php' on line 9,因为我手动更新了我的Laravel项目,肯定错过了一些更改。这也可能发生在任何在唯一名称空间中创建trait或类的人身上。
不管怎样,@德文郡对最初问题的评论给我指出了正确的方向。
我的composer.json文件中缺少所需的自动加载器配置,所以我从Laravel github repository检查了我的Laravel版本(本例中为5.4)应该是什么。
在本例中,我不是从App\中的名称空间调用的(该名称空间已经在composer.json中了)。
以下是我在composer.json中遗漏的内容:

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

感谢Devon!希望这能让别人不把头发拔出来。

hgb9j2n6

hgb9j2n64#

composer dumpautoload -o

这对我很有效

mhd8tkvw

mhd8tkvw5#

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

pbpqsu0x

pbpqsu0x6#

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

相关问题