Laravel 5.1 - 如何在全局函数文件中使用Model

时间:2015-08-05 05:57:55

标签: php laravel global laravel-5.1

我为我的所有全局功能创建了2015-08-03 13:29:08,377 ModuleManager Entering PrepareModules 2015-08-03 13:29:08,378 ModuleManager Entering LoadModules 2015-08-03 13:29:08,378 ModuleManager LoadModules, _modulesDirectory: C:\Workspace\esuite\UI.Desktop\Larix.Esuite.Desktop\bin\Debug\ 2015-08-03 13:29:12,438 ModuleManager Entering SelfInitialize 。当我运行我的第一个函数{{Common :: test()}}

它工作正常但是我不能在其中使用模型。

common.php

我跑{{Common :: getCmsBlocks()}}

时,我的输出结果不合适

2 个答案:

答案 0 :(得分:1)

如果您的模型与 App \ library 位于不同的命名空间,则需要在模型类名称前加上其命名空间,否则PHP将尝试加载 App \ library \ Modelname 可能不是你需要的。

替换

$model = Modelname::all();

$model = \Your\Model\Namespace\Modelname::all();

如果您在声明的命名空间中的多个位置使用 Modelname 类,则可以使用 use 语句导入/别名,以便您可以通过classname引用该类你的代码:

namespace App\library;
use Your\Model\Namespace\Modelname;
{
  class Common {
    public static function getCmsBlocks()
    {
      $model = Modelname::all(); //this will work now
    }
  }
}

无法定义全局使用以供文件中的所有命名空间使用,因为使用始终引用要声明的命名空间。

答案 1 :(得分:1)

如上所述,答案是完美的,但如果您不希望每次在每个文件的开头都包含命名空间,那么只需添加一些

使用此:

\App\ModelName::all();
\App\ModelName1::update(item);
\App\ModelName2::find(1);

给出如上所述的路径,每次都不需要使用命名空间。

注意:上面是App目录中的模型路径。因此,如果要将它们放在不同的位置,请相应地进行更改。