【问题标题】:Laravel name spacing issueLaravel 名称间距问题
【发布时间】:2014-01-26 19:13:48
【问题描述】:

我在 Laravel 中使用 IoC 容器,我试图从我的数据库中获取所有数据

<?php namespace API;

class ProductRepository implements ProductRepositoryInterface {

  public function getProducts()
  {
    return Product::all();
  }

}

当我运行它时,我得到了这个错误

Symfony \ Component \ Debug \ Exception \ FatalErrorException
Class 'API\Product' not found

我猜它正试图在我命名空间的 API 文件夹中找到产品模型。我的问题是如何让我的应用程序知道 Product:all() 应该使用 Product 模型。我的名字间距正确吗? ProductRespository 位于一个名为 API 的文件夹中。

【问题讨论】:

    标签: php laravel namespaces


    【解决方案1】:

    在命名空间中时,始终将\ 添加到根命名空间中的任何类:

    public function getProducts()
    {
         return \Product::all();
    }
    

    或者,您可以use 文件中的类:

    <?php namespace API;
    
    use Product;
    
    class ProductRepository implements ProductRepositoryInterface {
    
        public function getProducts()
        {
            return Product::all();
        }
    
    }
    

    【讨论】:

    • 嗯,好吧,我明白了。快速提问有没有更好的方法来做到这一点?当我尝试使用 Response::json 时,我被告知找不到该类,我真的不想最终不得不在所有存储库的顶部使用多个类。
    • @joshuahornby10 - 你不应该从你的存储库返回响应,但这是另一天的讨论。可以说没有更好的方法来处理这个问题。为了比较,看看 Laravel 的 Model class 和它的 Application class
    • 您能否指出一些关于为什么不应该从存储库返回响应的讨论?感谢您的帮助。
    • @joshuahornby10 - 您的存储库应该关注 http 层。这是控制器的工作。
    • 是的,有道理。因此,就我而言,在控制器中拥有$this-&gt;product-&gt;getProducts() 中的所有产品之后,我应该做什么?在那里返回响应?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-07
    • 2020-12-08
    • 1970-01-01
    • 2012-07-22
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    相关资源
    最近更新 更多