Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Laravel : Calling functions defined in base_controller from view

In using the laravel framework, how can I call a function defined in base_controller, in a view. For exacmple:

class Base_Controller extends Controller {

    public static function format_something()
    {
         return something;
    }
}

How can i call format_something() in a view file?

Usually the error I get looks something like this: Method [link_to_action] is not defined on the View class.

Probably a silly question, but thanks in advance!

Edit

Okay! First the correct place to do something like this is in the libraries folder. Second, problem is that your class cannot have underscores.

So in application/libraries I made file AppHelper.php with class

class AppHelper {

    public static function format_something()
    {
        return something;
    }
}

And can call it like:

$formated = AppHelper::format_something;

Thanks for the help and the good forum find Boofus McGoofus.

like image 678
Jim Avatar asked Nov 20 '12 20:11

Jim


People also ask

How do you call a function in laravel view?

$varbl = App::make("ControllerName")->FunctionName($params); to call a controller function from a my balde template(view page). Now i'm using Laravel 5 to do a new project and i tried this method to call a controller function from my blade template .

How do you call a function inside a function in laravel 8?

You can call controller function on same controller using "$this" key variable. In this example, I will give you a very simple example of call a function from the same controller class. I will create getColorCode() private function for return color code from color name. that function i will call in index() method.


2 Answers

For me is working:

Create directory "helpers" or whatever and file:

// app/helpers/AppHelper.php

class AppHelper {

    public static function format_something()
    {
        return something;
    }
}

Add path to composer.json

// composer.json

    "autoload": {
        "classmap": [
                    "app/helpers"   // <-------- add this line
        ]
    },

Run: (reload the autoload)

composer dump-autoload

Now you can call:

$formated = AppHelper::format_something();
like image 77
Lajdák Marek Avatar answered Oct 04 '22 12:10

Lajdák Marek


This answer was written for Laravel 3. For Laravel 4 and after, Lajdák Marek's answer using Composer's autoloader is better.

Functions like format_something() don't belong in the controller. The controller should just be about collecting data from various sources and passing it to the view. It's job is mostly just routing.

I've created a folder called "helpers" in the application folder for all my little helpery functions. To make sure all my controllers, views, and models have access to them, I've included the following in my start.php file:

foreach(glob(path('app').'helpers/*.php') as $filename) {
    include $filename;
}

I suspect that there's a better way to do that, but so far it has worked for me.

like image 35
J.T. Grimes Avatar answered Oct 04 '22 14:10

J.T. Grimes