当前位置: 首页 > 面试题库 >

如何使用Laravel创建外观类?

徐卓
2023-03-14
问题内容

我在使用Laravel创建立面模型类时遇到了一些问题。我已经关注了http://laravel.com/docs/facades,但是我想我缺少了一些东西。

我创建了一个文件夹app/modelsfoo。在那个文件夹中,我有两个文件。

第一个文件(Foo.php):

<?php
namespace Mynamespace;

class Foo {
    public function method() {

    }
}
?>

第二个文件(FooFacade.php):

<?php
use Illuminate\Support\Facades\Facade;

class Foo extends Facade {
    protected static function getFacadeAccessor() { return 'foo'; }
}
?>

然后我将数组添加Foo => 'Mynamespace\Foo'aliasesapp/config/app.php并运行composer updatecomposer dump-autoload

现在,当我尝试跑步时,Foo::method()我得到了Non-static method Mynamespace\Foo::method() should not be called statically。我究竟做错了什么?


问题答案:

步骤1

facadesapp文件夹(app/facades)中创建一个名为的文件夹。

第2步

将立面文件夹添加到您的作曲家自动加载中。

"autoload": {
    "classmap": [
        ...
        "app/facades"
    ]
},

第三步

在该文件夹(FooFacade.php)中创建一个Facade文件,并添加以下内容:

<?php
use Illuminate\Support\Facades\Facade;

class MyClass extends Facade {
    protected static function getFacadeAccessor() { return 'MyClassAlias'; } // most likely you want MyClass here
}

第四步

app/modelsMyClass.php)中创建一个模型

<?php
namespace MyNamespace;

use Eloquent; // if you're extending Eloquent

class MyClass extends Eloquent {
    ...
}

第5步

创建一个新的服务提供商(您可以在应用程序中创建一个名为的文件夹serviceproviders,并将其添加到composer自动加载中)(app/models/MyClassServiceProvider.php)。

<?php
use Illuminate\Support\ServiceProvider;

class MyClassServiceProvider extends ServiceProvider {
    /**
     * Register the service provider.
     *
     * @return void
     */
    public function register() {
        $this->app->bind('MyClassAlias', function(){
            return new MyNamespace\MyClass;
        });
    }
}

如果需要另一个外观,可以在此处添加新的绑定(如果需要,请不要忘记创建外观文件)。

第6步

将服务提供者添加到中的providers数组config/app.php

'providers' => array(
    ...
    'MyServiceProvider'
)

步骤7

运行,composer dump以便我们可以访问我们的新类。

步骤8

您现在可以MyClassAlias::method()作为外观访问。



 类似资料:
  • 我想在用户表中添加一个外键: 一个用户有一个城镇(法语为ville),一个城镇可以有多个用户: 我的村庄(城镇)迁移 我重命名了迁移(我不知道这样做是否有好处?),这是我迁移的顺序,正如您所看到的,我在用户之前创建了villes: 我在终端中发现了这个错误: 照亮\数据库\查询异常 SQLSTATE[42000]:语法错误或访问冲突:1072键列“villes\u id”在表中不存在(SQL:al

  • 如何使用外观模式 现在我们用 PersistencyManager 来管理专辑数据,用 HTTPClient 来处理网络请求,项目中的其他类不应该知道这个逻辑。他们只需要知道 LibraryAPI 这个“外观”就可以了。 为了实现外观模式,应该只让 LibraryAPI 持有 PersistencyManager 和 HTTPClient 的实例,然后 LibraryAPI 暴露一个简单的接口给其

  • 问题内容: 我有以下口才的查询(这是查询的简化版本,其中包含更多s和s,因此是实现此目的的明显回旋方式-该理论很重要): 如您所见,我最早的约会发生在我的约会上或之后。这导致运行单独的查询来获取该日期,然后将该日期用作主查询中的参数。有没有一种雄辩的方法可以将查询嵌入在一起形成一个子查询,因此只有1个数据库调用而不是2个? 编辑: 根据@Jarek的答案,这是我的查询: 这些块使查询中的所有参数突

  • 问题内容: 会定期提出类似的问题,但其中许多答案已过时。 我需要使用Java构建质量与当代桌面应用程序相当的GUI的跨平台桌面应用程序。 Swing是默认选择,但是我还没有遇到过一个Swing应用程序,该应用程序至少看起来并不太过时且笨拙(我知道是主观的,但是使用GUI很难避免美学判断)。 我注意到,新的比特币客户端现在使用带有Java绑定的QT,并且确实具有吸引人的用户界面,但是这样做的缺点是不

  • 基本上,我有两个问题在下面强调。然而,我最初的问题是基于一些研究,这就是为什么下面的文本要长一点。以下是我想知道的: 如果不使用云服务进行编译,我可以使用哪些框架构建具有本机外观的混合应用,你有什么建议吗 我喜欢使用混合应用(或至少是网络应用)的理念,为Android、iOS、Blackberry和Windows Phone 8等多个移动平台构建应用。由于我已经对现有框架进行了一些研究,我想知道是

  • 问题内容: 我需要一些使用ng-bind-html创建的ng-model的帮助。我在服务器中有一个JSON文件,其中有一些html和一些类似的输入: .json 然后,在我的HTML文件中,我会看到以下内容: 在我的Angular控制器中,我有一个JSON文件的ajax调用: 控制器: 填充了html,但是我不能将$ watch用于通过这种方法生成的模型(q)。 我如何监视以此方式创建的模型的变化