【发布时间】:2014-09-24 23:58:17
【问题描述】:
我正在开发一个 Laravel 包。在包中我需要 File::delete 来删除文件,但是会显示以下错误消息:
找不到类'Chee\Image\File'
你能帮帮我吗?
【问题讨论】:
我正在开发一个 Laravel 包。在包中我需要 File::delete 来删除文件,但是会显示以下错误消息:
找不到类'Chee\Image\File'
你能帮帮我吗?
【问题讨论】:
你必须在你的类的顶部声明它:
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)
}
}
【讨论】:
use File; 就够了? File 外观位于 Illuminate\Support\Facades 命名空间中,所以我不知道它为什么会起作用
你应该可以使用:
\File
命名空间与您为正在编写的类声明的命名空间相关。在对类的调用前添加“\”表示我们要在根命名空间中查找该类,即“\”。 Laravel File 类可以通过这种方式访问,因为它是在根命名空间中声明的别名。
【讨论】:
假设你有类似的文件:
<?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
【讨论】: