laravel 4 trait自动加载模型

时间:2014-02-28 18:33:58

标签: laravel models autoload traits

好的,我现在挣扎了2个多小时......

它必定是“天哪,这是显而易见的”时间,你太累了,你看不到解决方案......

我想扩展eloquentmodel以包含特征。

所以我的班级看起来像

<?php 
class Note extends Eloquent{
  use \Admin\GreatTrait;

  ...
}

我创建了app/Traits/Admin目录结构,并在那里创建了名为GreatTrait.php的文件,其中包含以下内容:

<?php namespace Admin;

trait GreatTrait{
  ...
}

和cource我编辑了start/global.php以将dir包含在ClassLoader中,如此

ClassLoader::addDirectories(array(
    app_path().'/commands',
    ... more ...
    app_path().'/traits',
    app_path().'/traits/Admin',
));

我收到以下错误...

Symfony \ Component \ Debug \ Exception \ FatalErrorException

Trait 'Admin\GreatTrait' not found

有什么建议吗?

2 个答案:

答案 0 :(得分:3)

按照您的代码,我让它适用于下一个更改:

  1. 包含在composer.json中:

    "autoload": {
        "classmap": [
            "app/traits"
        ] 
    }
  2. 包括在模型中的类声明后(只是特征名称,没有 目录):

    php 
    class Note extends Eloquent {
        use \GreatTrait;
        ...
    }
    ?>

答案 1 :(得分:1)

我在global.php中遇到了自动加载的问题,你可以使用copmposer.json做同样的事情:

composer.json

中添加自动加载数组的路径
"autoload": {
                "classmap": [
                        "app/traits"
                ]
        },

运行composer dump-autoload

app / traits 路径中,您应该拥有管理文件夹 app / traits / admin ,并设置名称空间管理员。

<?php
namespace Admin
class GreatTrait { ... }

然后你可以使用

<?php 
use \Admin\GreatTrait;
class Note extends Eloquent{

  ...
}