如何使用 laravel 别名调用非静态方法

Posted

技术标签:

【中文标题】如何使用 laravel 别名调用非静态方法【英文标题】:How to call non-static method using laravel alias 【发布时间】:2020-12-26 00:07:45 【问题描述】:

我有一个自定义帮助程序类,并为该类设置了别名以访问刀片文件(前端)。我可以访问引用 alias::method 的静态方法,但我需要从视图中访问非静态方法。我该怎么做?

'Access' => App\Services\Access::class,
Two functions in Access class.
public function getPermissions()
public static function getUser()

我可以使用Access::getUser() 轻松访问静态函数 那么如何访问非静态函数呢?

【问题讨论】:

你需要一个类的实例才能调用非静态方法......也许你想要这个类的 Facade 或者让魔术 __callStatic 方法创建一个新实例并为你调用它的方法 @lagbox 谢谢。这才是重点。可以分享一些代码或网址吗? 您能提供您尝试使用它的代码吗? 我需要从视图中调用 getPermissions() 函数。通过访问别名。 但在下面您说您需要在自定义刀片指令中使用它......它是什么? 【参考方案1】:

如果你只想在你的视图中访问它,你可以将一个新的 Access 实例共享给你的所有视图:

在 AppServiceProvider 的 boot() 方法中:

View::share('access', (new App\Services\Access));

然后在你的刀片中@foreach($access->getPermissions() as $permission)

【讨论】:

没有。我不需要使用视图共享,因为我想访问自定义刀片指令中的非静态方法。【参考方案2】:

您可以将此类的实例注入到您的视图中:

@inject('access', Access::class)

现在您可以通过$access->whatEverMethod() 访问所有这些方法。否则,您将需要 Facade 或处理魔术方法来调用类本身的非静态方法。

【讨论】:

以上是关于如何使用 laravel 别名调用非静态方法的主要内容,如果未能解决你的问题,请参考以下文章

Laravel - 如何调用模型类助手然后在视图中显示结果

Laravel 5.1 GeoIP 非静态方法不应被静态调用,假设 $this 来自不兼容的上下文

react中如何在静态方法中调用静态属性

如何在 laravel 4 的 Blade.php 模板中使用静态函数?

如何在Laravel中的多对多关系中添加“别名”?

如何在 kotlin 中使用非静态方法?