Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/248.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel 5.6外观/别名未注册/工作_Php_Laravel_Laravel 5.6 - Fatal编程技术网

Php Laravel 5.6外观/别名未注册/工作

Php Laravel 5.6外观/别名未注册/工作,php,laravel,laravel-5.6,Php,Laravel,Laravel 5.6,我正在尝试创建自己的自定义Facade,并使用自定义服务容器注册is,最后为该Facade创建自定义别名 我不确定哪个部分不工作,可能是服务容器注册或别名有问题 让我们从我的外观开始: /** * * @see \App\Library\Facades\ViewWrapper\CustomView */ class CustomViewFacade extends Facade { protected static function getFacadeAccessor() {

我正在尝试创建自己的自定义Facade,并使用自定义服务容器注册is,最后为该Facade创建自定义别名

我不确定哪个部分不工作,可能是服务容器注册或别名有问题

让我们从我的外观开始:

/**
 *
 * @see \App\Library\Facades\ViewWrapper\CustomView
*/
class CustomViewFacade extends Facade
{
    protected static function getFacadeAccessor()
    {
        return 'customview';
    }
}
我的CustomView类,带有逻辑和
show
功能

namespace App\Library\Facades\ViewWrapper;

...

class CustomView
{
    public function show(...) { ... }

    ...
} 
我的CustomViewServiceProvider

namespace App\Providers;

...  

class CustomViewServiceProvider extends ServiceProvider
{
    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        $this->app->singleton(CustomViewFacade::class);
        $this->app->alias(CustomViewFacade::class, 'customview');
    }
}
如何在
config\app.php

App\Providers\CustomViewServiceProvider::class,
'CustomView' => App\Library\Facades\ViewWrapper\CustomViewFacade::class
如何在
config\app.php

App\Providers\CustomViewServiceProvider::class,
'CustomView' => App\Library\Facades\ViewWrapper\CustomViewFacade::class
在我的控制器中,我使用如下外观:

use CustomView;

...

public function show(ImageRequest $imagerequest)
{
    return CustomView::show(...);
}
我在控制器中发现以下错误:

找不到类“CustomView”

我做错了什么

编辑 清除config和composer自动加载转储后,出现以下错误:

调用未定义的方法App\Library\Facades\ViewWrapper\CustomViewFacade::show()


请运行下面的命令并检查:

php artisan config:cache

php artisan cache:clear

请运行下面的命令并检查:

php artisan config:cache

php artisan cache:clear

我想你还不太清楚外墙是怎么工作的。它们只是访问您的服务的一种简单方法,无需处理依赖注入。我不喜欢这种方法,但下面是如何正确使用它的

  • 您需要将实际服务绑定到容器,而不是外观。facade几乎只是容器中指向您的服务的符号链接
  • 您需要导入实际的服务,而不是外观。由于其幕后的魔力,Laravel将自动绑定类型提示变量中的依赖项
  • 使用:

    使用App\Library\Facades\ViewWrapper\CustomView;
    
    (小提示:此处的名称空间应该是服务的名称空间,注意不要混淆facade和服务之间的语义。服务包含逻辑,facade只是已注入服务的访问器。这很重要!!)

    而不是:

    使用CustomView;
    
    它应该解决这个问题

    另外,我建议您通过在
    引导
    函数中使用闭包来定义类应该如何构造并注入到服务容器中

    类CustomViewServiceProvider扩展了ServiceProvider
    {
    /**
    *注册任何应用程序服务。
    *
    *@返回无效
    */
    公共职能登记册()
    {
    $this->app->singleton(CustomView::类,函数(){
    返回新的CustomView(…);
    );
    }
    }
    
    此外,别名功能在您的情况下是不必要的。它只允许您使用服务容器中的
    customview
    键访问服务

    只需在config/app.php文件中定义外观


    另一个小建议:在facade访问器定义中使用PHP7类选择器,而不是字符串。例如:
    CustomView::class
    intead of
    CustomView
    。它使代码更整洁、更易于阅读。

    我想你还没有完全理解facade是如何工作的。它们只是访问服务的一种简单方式不必处理依赖注入的ICE。我不喜欢这种方法,但这里有一些正确的方法

  • 您需要将您的实际服务绑定到容器,而不是外观。外观几乎只是容器中指向您的服务的符号链接
  • 您需要导入实际的服务,而不是facade。由于其幕后的魔力,Laravel将自动在类型提示变量中绑定您的依赖项
  • 使用:

    使用App\Library\Facades\ViewWrapper\CustomView;
    
    (小提示:此处的名称空间应该是服务的名称空间,注意不要混淆facade和服务之间的语义。服务包含逻辑,facade只是已注入服务的访问器。这很重要!!)

    而不是:

    使用CustomView;
    
    它应该解决这个问题

    另外,我建议您通过在
    引导
    函数中使用闭包来定义类应该如何构造并注入到服务容器中

    类CustomViewServiceProvider扩展了ServiceProvider
    {
    /**
    *注册任何应用程序服务。
    *
    *@返回无效
    */
    公共职能登记册()
    {
    $this->app->singleton(CustomView::类,函数(){
    返回新的CustomView(…);
    );
    }
    }
    
    此外,别名功能在您的情况下是不必要的。它只允许您使用服务容器中的
    customview
    键访问服务

    只需在config/app.php文件中定义外观


    另一个小建议是:在facade访问器定义中使用PHP7类选择器,而不是字符串。例如:
    CustomView::class
    intead of
    CustomView
    。这样可以使代码更整洁、更易于阅读。

    请尝试PHP artisan缓存:清除和编写器转储自动加载-请尝试PHP artisan缓存:清除和编写r dumpautoload-oI现在得到这个错误
    调用未定义的方法App\Library\Facades\ViewWrapper\CustomViewFacade::show()
    我现在得到这个错误
    调用未定义的方法App\Library\Facades\ViewWrapper\CustomViewFacade::show()
    你的确切意思是“只在boostrap文件中定义外观”?我的不好。请查看
    config/app.php
    。那么我是否应该使用CustomViewFacade?我有点困惑是的,在别名数组中添加一行,就像默认情况一样。例如:
    'CustomView'=>命名空间\ To\CustomView\Facade\CustomViewFacade::class
    …我删除了Facade,现在它可以工作了,为什么我应该添加facade?你到底是什么意思“只在boostrap文件中定义外观”?我的错。请查看
    config/app.php
    。那么我是否应该使用CustomViewFacade?我有点困惑是的,在别名数组中添加一行,就像它已经完成一样