【问题标题】:How to make a custom helper function, available in every controller for Laravel 5如何制作自定义辅助函数,在 Laravel 5 的每个控制器中都可用
【发布时间】:2017-07-10 05:53:17
【问题描述】:

我刚刚阅读了this post 以创建一个可以从任何控制器访问的全局函数。但我不明白它是如何工作的。

我想让任何控制器都可以访问变量“服务”。所以,我把General.php 放到app/Http 中。这是代码。

<?php
class General {

   public function getServices() {
      $services = "SELECT * FROM products";
      return $services;
   }
}

我在控制器中包含它

<?php
namespace App\Http\Controllers;

use App\Http\General;
use Illuminate\Http\Request;

class HomeController extends Controller {
   public function index() {

       $title = 'Our services';
       $services = General::getServices();

       return view('welcome',  compact('title','services'));

   }
}

当我运行它时,我得到了错误Class 'App\Http\General' not found。然后我怎么能 任何人都可以提供帮助将不胜感激。

【问题讨论】:

  • 您的代码中有 2 个错误:首先:您在通用类的顶部添加了正确的命名空间。第二:getServices() 方法必须声明为静态的,如果你想像 General::getServices() 一样使用它;

标签: php laravel-5


【解决方案1】:

首先在app 目录下的.php 文件中创建所需的函数

helpers.php

if (!function_exists('getServices')) {
    public function getServices() {
        return DB::table('services')->get();
    }
}

并将此文件包含在 composer.json 内的 autoload/files 数组中

composer.json

"autoload": {
    "classmap": [
        "database"
    ],
    "psr-4": {
        "App\\": "app/"
    },
    "files": [
        "app/helpers.php"
    ]
},

然后update the composer,现在您可以直接在整个项目中使用创建的函数,因为文件在应用程序启动时会自动加载

$result = getServices();

【讨论】:

  • 是的,现在可以从控制器访问函数 getService()。但我想知道为什么它返回一个字符串"SELECT * FROM products" 而不是数据数组?
  • 知道了!请改用DB::table('services')-&gt;get();
【解决方案2】:

首先你在 app 目录中创建一个名为 General.php 的通用文件

<?php 
namespace App;
use Illuminate\Http\Request;

class General {

public function __construct()
{

}

public function getServices() {
  $services = "SELECT * FROM users";

  return $services;
}
}

然后在Controller中你要调用这个调用

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\General;

class HomeController extends Controller {

    $general = new General();
    $services = $general->getServices();
    dd($services);

}

【讨论】:

    【解决方案3】:

    如果你想使用任何全局函数,那么你可以创建自己的辅助类或函数, 然后在自动加载中注册该类,这就是你所要做的。 现在,您可以在任何地方调用该函数

    【讨论】:

      【解决方案4】:

      当我尝试在 composer.json 中注册我的 helpers.php 文件时遇到问题。由于我在文件顶部包含了一个命名空间,所以我总是收到函数未定义错误,但是当我删除它时,一切对我来说就像一个魅力。那么接下来的内容如下:

      1. 创建您的 helpers.php 文件并将其放在应用程序或引导目录中。

      2. 如果您只想使用您的函数,请确保不要包含命名空间。

      3. 包含在您的 composer.json app/helpers.php 或 bootstrap/helpers.php 中,具体取决于您放置文件的位置。

      4. 运行命令composer dump-autoload

      5. 现在您的函数将在您的应用中的任何地方全局访问。

      【讨论】:

        猜你喜欢
        • 2011-09-20
        • 2016-04-04
        • 2015-04-02
        • 1970-01-01
        • 1970-01-01
        • 2015-11-09
        • 1970-01-01
        • 2015-06-24
        • 2016-01-06
        相关资源
        最近更新 更多