未找到Laravel 5.2自定义助手

时间:2016-08-25 18:59:54

标签: laravel composer-php helper

我创建了app / Http / helpers.php

if (!function_exists('getLocation')) {
function getLocation($request)
{
    return 'test';
}

我在composer.json autoload中添加了文件部分

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

这是我的控制器:

namespace App\Http\Controllers;

use App\Jobs\ChangeLocale;
use App\Http\Requests;
use Illuminate\Http\Request;
use DB;
use Log;

class HomeController extends Controller
{
     public function index(Request $request)
     {  
          $data['location'] = getLocation($request);

     }

}

当我在控制器中调用函数作为getLocation($ request)时;它说"调用未定义的函数App \ Http \ Controllers \ getLocation()"

这在我的本地工作正常,但在远程服务器上没有。我在远程服务器上缺少什么。尝试过作曲家安装和作曲家dump-autoload。

更新: 辅助文件未列在vendor / composer / autoload_files.php

3 个答案:

答案 0 :(得分:1)

在服务器上,您需要执行:

composer dumpautoload

因为在vendor/autoload.php

上找不到它

答案 1 :(得分:1)

试试这个,

  1. 在app目录中创建Helpers目录。
  2. 在Helpers目录中创建一个Example.php文件
  3. 在config / app.php文件中为此文件创建一个alieas

    Ex:'示例' => App \ Helpers \ Example :: class,

  4. Example.php中的代码如下,

    <?php 
    
    namespace App\Helpers;
    
    class Example
    {   
        static function exampleMethod()
        {
           return "I am helper";
        }
    }
    

    在Controller文件中使用上面的示例助手,如下所示,

    <?php
    
    namespace App\Http\Controllers;
    use App\Helpers\Example;
    
    class HomeController extends Controller
    {
         public function index(Request $request)
         {  
              return Example::exampleMethod();
    
         }
    
    }
    

    在刀片视图文件中使用上面的示例帮助程序,如下所示,

    <div>{{ Example::exampleMethod()}}</div>
    

    这将有助于您获得解决方案。

答案 2 :(得分:0)

确保Helper.php的结构正确...

<?php

//no namespace, no classes
//classes are not helpers

if ( !function_exists('nextStage') ) {
    function nextStage($currentStage) {
        //if you need to access a class, use complete namespace
        return \App\Models\Stage::where('id',$currentStage)->first()->next_stage;
    }
}

More help on Laracast found here