【问题标题】:Laravel Package Development simple function does not workLaravel 包开发简单功能不起作用
【发布时间】:2014-11-20 09:39:14
【问题描述】:

抱歉标题不好,但我不知道为我的问题提供一个好的标题。

我用工作台创建了一个包。现在我有一个包裹。假设 strernd/mypkg 在工作台目录Strernd/Mypkg 中,我有以下代码: http://laravel.io/bin/oNzoa

为什么Mypkg::test()work 和$mypkg = new Mypkg(); $mypkg->test(); 不行? (在我的应用程序中) 错误是 Call to undefined method Strernd\Mypkg\Facades\Mypkg::test()Call to undefined method Strernd\Mypkg\Facades\Mypkg::test()

我想我在这里不了解 PHP 的一些基本原理。我更像是一个复制&粘贴/尝试&错误的“开发者”,但在大多数情况下效果很好。

【问题讨论】:

    标签: php laravel package


    【解决方案1】:

    当以“静态”方式使用它时,Laravel 将访问您编写的外观并实例化底层类,然后调用该实例上的方法。当您使用new Mypkg 调用test 方法时,您实际上是在实例化facade 类,而不是底层类。该外观类没有 test 方法,因此出现错误。

    试试这样:

    use Strernd\Mypkg as MypkgActual;
    
    $mypkg = new MypkgActual;
    $mypkg->test();
    

    我相信,因为您的外观和实际的类实现具有相同的确切类名,所以您会遇到伪类名称冲突,而 Laravel 的外观系统胜出。您也可以尝试将外观的名称更改为MypkgFacade

    【讨论】:

    • 似乎对我不起作用:Class 'Strernd\Mypkg' not found 有什么好办法吗?
    • 查看this question 的答案。您可能需要在 workbench/[vendor]/[package] 目录中运行 composer install
    • 也不起作用。在我的包中创建另一个类(如Car)然后使用类似$car = Mypkg::makecar() 的东西是否是一种解决方案。我会得到一个 Car 实例,不是吗?
    猜你喜欢
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 2012-11-08
    • 2021-09-24
    • 1970-01-01
    • 1970-01-01
    • 2011-09-10
    相关资源
    最近更新 更多