Laravel:从视图中调用base_controller中定义的函数

Jim*_*Jim 14 php static-classes laravel

在使用laravel框架时,如何在视图中调用base_controller中定义的函数.例如:

class Base_Controller extends Controller {

    public static function format_something()
    {
         return something;
    }
}
Run Code Online (Sandbox Code Playgroud)

如何在视图文件中调用format_something()?

通常我得到的错误看起来像这样:方法[link_to_action]没有在View类上定义.

可能是一个愚蠢的问题,但提前感谢!

编辑

好的!首先,做这样的事情的正确位置是在libraries文件夹中.第二,问题是你的班级不能有下划线.

所以在应用程序/库中我用class创建了AppHelper.php文件

class AppHelper {

    public static function format_something()
    {
        return something;
    }
}
Run Code Online (Sandbox Code Playgroud)

可以称之为:

$formated = AppHelper::format_something;
Run Code Online (Sandbox Code Playgroud)

感谢您的帮助和良好的论坛找到Boofus McGoofus.

Laj*_*rek 21

对我来说工作:

创建目录"helpers"或其他任何文件:

// app/helpers/AppHelper.php

class AppHelper {

    public static function format_something()
    {
        return something;
    }
}
Run Code Online (Sandbox Code Playgroud)

添加composer.json的路径

// composer.json

    "autoload": {
        "classmap": [
                    "app/helpers"   // <-------- add this line
        ]
    },
Run Code Online (Sandbox Code Playgroud)

运行:(重新加载自动加载)

composer dump-autoload
Run Code Online (Sandbox Code Playgroud)

现在你可以打电话:

$formated = AppHelper::format_something();
Run Code Online (Sandbox Code Playgroud)

  • 使用这种技术,我可以在控制器中调用该方法,但不能在模板中调用.我最终想要的是能够在视图模板中执行{{Notifier :: alert('info','我的信息消息')}}.我怎么做到这一点? (4认同)

J.T*_*mes 10

这个答案是为Laravel 3编写的.对于Laravel 4及之后,LajdákMarek使用Composer的自动加载器的答案更好.

类似的功能format_something()不属于控制器.控制器应该只是从各种来源收集数据并将其传递给视图.它的工作主要是路由.

我已经在应用程序文件夹中为我的所有小函数创建了一个名为"helpers"的文件夹.为了确保我的所有控制器,视图和模型都可以访问它们,我在我的start.php文件中包含以下内容:

foreach(glob(path('app').'helpers/*.php') as $filename) {
    include $filename;
}
Run Code Online (Sandbox Code Playgroud)

我怀疑有更好的方法可以做到这一点,但到目前为止,它对我有用.