Mirza
Mirza

Reputation: 1551

Laravel 5.2 custom helper not found

I have created app/Http/helpers.php

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

I have added files section in composer.json autoload

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

Here is my controller :

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);

     }

}

When I call the function in controller as getLocation($request); it is saying "Call to undefined function App\Http\Controllers\getLocation()"

This is working fine in my local , but not on remote server. What am I missing in my remote server. Tried composer install and composer dump-autoload.

UPDATE: The helper file is not getting listed in vendor/composer/autoload_files.php

Upvotes: 3

Views: 3026

Answers (3)

James Bailey
James Bailey

Reputation: 508

Make Sure the structure of the Helper.php is correct...

<?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

Upvotes: 0

Veera Prasad
Veera Prasad

Reputation: 89

Try like this,

  1. create Helpers directory inside the app directory.
  2. create a Example.php file inside the Helpers directory
  3. create a alieas for this file at config/app.php file

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

The code in the Example.php like follows,

<?php 

namespace App\Helpers;

class Example
{   
    static function exampleMethod()
    {
       return "I am helper";
    }
}

Using the above Example helper in Controller files like follows,

<?php

namespace App\Http\Controllers;
use App\Helpers\Example;

class HomeController extends Controller
{
     public function index(Request $request)
     {  
          return Example::exampleMethod();

     }

}

Using the above Example helper in blade view files like follows,

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

This will help you to get solution.

Upvotes: 0

Pete Houston
Pete Houston

Reputation: 15079

On server, you need to execute:

composer dumpautoload

because it is not found on vendor/autoload.php

Upvotes: 2

Related Questions