当前位置: 首页 > 知识库问答 >
问题:

Laravel自定义视图助手停止工作,如果使用命名空间

汪建德
2023-03-14

我已经按照一些教程创建了一些用于刀片视图的全局助手函数。

我已经在App\Helper文件夹中创建了ViewHelpers.php文件。此文件包含以下代码:

<?php

class ViewHelpers {

    public static function bah()
    {
        echo 'blah';
    }
}

这是我的服务提供商,它加载我的助手(目前只有一个文件):

<?php namespace App\Providers;

use Illuminate\Support\ServiceProvider;

class HelperServiceProvider extends ServiceProvider {

    public function register()
    {
        foreach (glob(app_path().'/Helpers/*.php') as $filename){
            echo $filename; // for debugging - yes, I see it is getting called
            require_once($filename);
        }
    }
}

我已将其添加到“提供者”部分的config\app.php中:

'App\Providers\HelperServiceProvider',

现在我在刀片视图中调用我的助手:

{{ViewHelpers::bah()}}

就目前而言,它运行良好。

但是如果我将我的ViewHelper命名空间更改为:

<?php namespace App\Helpers;

class ViewHelpers {

  // omitted for brevity

即使ViewHelpers类位于不同的命名空间中,如何使视图也能看到它?我在哪里添加使用应用程序\助手

另一个相关的问题-我是否可以为ViewHelper类创建一个别名,使其在我的视图中看起来像VH: bah()

如果可能的话,我更喜欢用简单的方式来做(没有门面什么的),因为这些只是静态助手,不需要类实例和IoC。

我正在使用Laravel 5。

共有1个答案

越俊艾
2023-03-14

您将获得未找到的类“ViewHelpers”,因为没有ViewHelpers,存在App\Helpers\ViewHelpers,并且您需要指定命名空间(即使在视图中)。

您可以在config/app.php中注册别名,这将允许您使用VH::某物()

'aliases' => [
     // in the end just add:
    'VH' => 'App\Helpers\ViewHelpers'
],

如果你的命名空间是正确的,你甚至不必使用提供者-类将由Laravel加载。

 类似资料:
  • 我正在尝试在Laravel 5.6中创建一个自定义帮助器 我的助手路径是app\Helpers\ReadExcel。php 以下是我的助手文件: 我的助手的服务提供商如下 在: 我尝试在控制器方法中使用帮助器,如下所示: 我得到的错误如下: 找不到类“ReadExcel” 请帮我这个。我不确定错在哪里。

  • 我在中有一些助手类。如何使用

  • 我正在尝试将管道分隔字符串转换为xml,这很好。但是,我没有得到我在下面展示的实际输出。在我的输出中,父标记与包名一起生成,它也没有生成我想要的名称空间。你能帮我把平面文件转换成我期望的精确输出吗。 CamelConfig。JAVA ConverterRoute。JAVA 来源txt Test.java 输出 测验xml 预期产量 测验xml

  • 我正在尝试为我的Laravel(5.2)API项目设置单元测试。在使用单元测试之前,我想为它们定义一个自定义名称空间,因此我创建了文件。像这样: 然后,我创建了一个文件夹下的文件夹,并将我的单元测试放在该文件夹与以下命名空间: 现在,当我想运行单元测试时,我得到以下错误: 所以基本上,Laravel认为在Test命名空间中可以找到类,而不是Laravel的命名空间。 我还在文件: 我也尝试过运行这

  • 本文向大家介绍thinkphp autoload 命名空间自定义 namespace,包括了thinkphp autoload 命名空间自定义 namespace的使用技巧和注意事项,需要的朋友参考一下 使用thinkPHP过程中,一些自定义的类库和第三方类库需要找一个合适的位置放置,放到系统默认的org文件夹感觉不太好,破坏了thinkPHP的原生目录。 就看了一下官方手册,可以在模块或者应用的