如何在Laravel 5的每个控制器中提供自定义辅助函数

时间:2017-07-10 05:53:18

标签: php laravel-5

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

我想让任何控制器都可以访问变量'services'。所以,我制作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。然后我怎么做 任何人都可以提供帮助,我们将不胜感激。

4 个答案:

答案 0 :(得分:7)

首先在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();

答案 1 :(得分:0)

首先在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);

}

答案 2 :(得分:0)

如果你想使用任何全局函数,那么你可以创建自己的帮助器类或函数, 然后在autoload中注册该类,这就是你所要做的。 现在,无论你想要什么,你都可以调用该函数

答案 3 :(得分:0)

当我尝试在composer.json中注册我的helpers.php文件时遇到问题。由于我在文件顶部包含一个名称空间,所以我总是遇到函数未定义的错误,但是当删除它时,一切对我来说都是一种魅力。所以要遵循的是以下内容:

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

  2. 如果只想使用函数,请确保不包括名称空间。

  3. 根据您放置文件的位置,将其包含在composer.json app / helpers.php或bootstrap / helpers.php中。

  4. 运行命令composer dump-autoload

  5. 现在,您的函数将在您的应用程序中的任何位置全局访问。