【问题标题】:Laravel 4: use Facade in custom ClassLaravel 4:在自定义类中使用 Facade
【发布时间】:2013-06-18 12:51:20
【问题描述】:

我正在使用 Laravel 4 开发一个应用程序,我有一个问题想在完全投入使用之前被问到。

我已经创建了一些自定义类和外观,并成功添加到 laravel 的配置文件中。

例如:

namespace Helpers;

class Ftp {

    public function connect($data)
    {
        // Do something
    }

}

我实际上是在使用 php 的 use 语句来访问门面,就像我在 Laravel 中通常所做的那样:

namespace Helpers;

use Illuminate\Support\Facades\File;

class Ftp {

    public function Connect($data)
    {
        $file = File::get('text.txt');
            ...
    }

}

现在在自定义类中使用 laravel 外观的正确方法是什么?我不觉得这是一个好的选择,特别是考虑到可测试性。任何建议表示赞赏!

【问题讨论】:

  • 为什么对可测试性没有好处?你可以做File::shouldReceive('get')->once()->with('text.txt')->andReturn('foo');
  • 如果您希望使用不同的文件进行测试,请将 $file 作为参数
  • @crynobone 没错,laravel 的门面有内置的 mock 方法,我忘了。
  • @OneTrickPony 你也是对的,这对我来说是一个愚蠢的例子,更合适的情况可能是在继续之前需要使用验证器的外观。

标签: php class laravel facade


【解决方案1】:

只需使用文件。在 app/config/app.php 中,立面获得别名。

<?php namespace Helpers;

class Ftp {

    public function Connect($data)
    {
        $file = \File::get('text.txt');
        ...
    }

}

【讨论】:

  • 这就是答案,“\”有助于解析命名空间,谢谢。
  • 您可以添加“使用文件;”也是。 “\”终止了我的语法高亮。
  • \ 如果您的编辑器不错,则不会取消语法高亮。
  • 不过,它会扼杀在体面的 IDE 中提供代码自省、自动完成和适当重构的任何尝试。
  • 嗯?这根本不符合逻辑。 \ 是命名空间。任何像样的 IDE 都可以处理这个 5.3 PHP 特性
猜你喜欢
  • 2014-12-04
  • 1970-01-01
  • 2013-11-05
  • 2014-12-04
  • 1970-01-01
  • 2020-04-13
  • 1970-01-01
  • 2014-01-28
  • 2015-09-13
相关资源
最近更新 更多