如何使用 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 5.1 GeoIP 非静态方法不应被静态调用,假设 $this 来自不兼容的上下文