Php Laravel 5.1-如何在全局函数文件中使用模型

Php Laravel 5.1-如何在全局函数文件中使用模型,php,laravel,global,laravel-5.1,Php,Laravel,Global,Laravel 5.1,我为我的所有全局函数创建了一个common.php。当我运行我的第一个函数{{Common::test()} 它的工作很好,但我不能使用它的模型 namespace App\library; { class Common { public static function test() { echo "Yes"; return "This comes from Common F

我为我的所有全局函数创建了一个
common.php
。当我运行我的第一个函数{{Common::test()}

它的工作很好,但我不能使用它的模型

namespace App\library;
{
    class Common {

            public static function test()
            {
                echo "Yes";
                return "This comes from Common File";
            }
            public static function getCmsBlocks()
            {
                $model = Modelname::all();
                if($model){
                    echo "asdad";
                }else
                {
                    echo "sadasd";
                }
            }

    }
}

当我运行{{Common::getCmsBlocks()}

时,我不会得到输出,如果您的模型位于与App\library不同的命名空间中,则需要在模型类名前加上其命名空间,否则PHP将尝试加载App\library\Modelname,这可能不是您需要的

替换

$model = Modelname::all();

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

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

没有办法定义文件中所有名称空间都使用的全局use,因为use总是指要声明的名称空间。

如上所述,答案是完美的,但如果不想每次在每个文件的开头都包含名称空间,只需添加一些内容

使用以下命令:

\App\ModelName::all();
\App\ModelName1::update(item);
\App\ModelName2::find(1);
像上面那样给出路径,就不需要每次都使用名称空间


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

您是否有任何错误?知道这会有帮助是的,我遇到了一个致命错误,比如类'App\library\Modelname'找不到OK,所以请看答案:)非常感谢,它工作正常,但每次我都需要在common.php中声明名称空间?这不可能像我们在全局文件中声明一个模型和common.php访问那样,它是自动的?可以在您声明的每个名称空间中声明一次,但仅此而已-我马上更新答案。没有办法全局声明“use”,因为它总是指正在定义的名称空间。很好,这意味着如果我有20多个模型,那么我需要一次性声明common.php文件中的所有模型,对吗?这将是大量工作,但是你所尝试的——一些普通的类操作20个模型——不是一个好的实践。你是对的,但它只适用于一个模型。如何在common.php文件中定义所有模型
\App\ModelName::all();
\App\ModelName1::update(item);
\App\ModelName2::find(1);