【问题标题】:how to access to laravel global Classes in packages如何访问包中的 laravel 全局类
【发布时间】:2014-09-24 23:58:17
【问题描述】:

我正在开发一个 Laravel 包。在包中我需要 File::delete 来删除文件,但是会显示以下错误消息:

找不到类'Chee\Image\File'

你能帮帮我吗?

【问题讨论】:

    标签: laravel package


    【解决方案1】:

    你必须在你的类的顶部声明它:

    namespace Chee\Image;
    
    use File;
    
    class Whatever()
    {
    
    }
    

    除了使用 File Facade,你也可以直接从 Laravel IoC 容器中获取它:

    $app = app();
    
    $app['files']->delete($path)
    

    在服务提供者中,您可以将其作为依赖项注入您的包类:

    class Provider extends ServiceProvider {
    
        public function register()
        {
            $this->app['myclass'] = $this->app->share(function($app)
            {
                return new MyClass($app['files']);
            });
        }
    
    }
    

    并在你的课堂上接收它:

    class MyClass {
    
        private $fileSystem;
    
        public function __construcy($fileSystem)
        {
            $this->fileSystem = $fileSystem;
        }
    
        public function doWhatever($file)
        {
            $this->fileSystem->delete($file)
        } 
    
    }  
    

    【讨论】:

    • 坦克,我可以使用服务提供商吗?在这种情况下,您能给我一些信息吗?
    • 已编辑以提供有关如何直接从 IoC 和服务提供商中使用它的更多信息。
    • @AntonioCarlosRibeiro 为什么use File; 就够了? File 外观位于 Illuminate\Support\Facades 命名空间中,所以我不知道它为什么会起作用
    • 因为在你的 'app/config/app.php' 中有一个别名,Laravel 在启动时会实例化所有这些类。
    • 我使用服务提供商,它工作正常,坦克
    【解决方案2】:

    你应该可以使用:

    \File
    

    命名空间与您为正在编写的类声明的命名空间相关。在对类的调用前添加“\”表示我们要在根命名空间中查找该类,即“\”。 Laravel File 类可以通过这种方式访问​​,因为它是在根命名空间中声明的别名。

    【讨论】:

      【解决方案3】:

      假设你有类似的文件:

      <?php
      
      namespace Chee\Image;
      
      class YourClass 
      {
         public function method() {
           File::delete('path');
         }
      }
      

      你应该添加use指令:

      <?php
      
      namespace Chee\Image;
      
      use Illuminate\Support\Facades\File;
      
      class YourClass 
      {
         public function method() {
           File::delete('path');
         }
      }
      

      否则,如果您不使用 PHP,则会在您当前的命名空间中寻找 File 类,因此它正在寻找 Chee\Image\File。如果您愿意,可以查看How to use objects from other namespaces and how to import namespaces in PHP

      【讨论】:

        猜你喜欢
        • 2013-04-22
        • 2016-09-23
        • 2011-10-20
        • 1970-01-01
        • 2016-10-26
        • 1970-01-01
        • 2021-10-02
        • 2015-08-30
        • 1970-01-01
        相关资源
        最近更新 更多