【问题标题】:Laravel - Possible to detect if package is running from workbench or vendor?Laravel - 可以检测包是否从工作台或供应商运行?
【发布时间】:2014-01-10 10:23:23
【问题描述】:

我确信通过一些黑客攻击我可以找到一种方法来做到这一点,但我希望有一个优雅的解决方案。我需要能够检测我的包何时从工作台运行,以及该包是否已安装并作为第 3 方运行。

【问题讨论】:

    标签: php laravel laravel-4 package


    【解决方案1】:

    您可以在主包类中创建一个方法来进行检查,如下所示:

    MyClass {
    
        protected function getPackageLocation()
        {
            // Check if the path to this file contains 'workbench'
            if (strpos(realpath(__FILE__), 'workbench') !== false) {
                return 'workbench';
            }
    
            // If not, it's in vendor folder
            return 'vendor';
        }
    
    }
    

    如果您需要从包外部检查它,您可以随时公开该功能。

    为了使其更可靠,您可以在条件中检查workbench/your_vendor/your_package/,甚至可以通过以下方式使其成为动态:

    // untested: translate namespace to path format
    $needle = 'workspace/' . strtolower(str_replace("_", "/", __NAMESPACE__));
    
    if (strpos(realpath(__FILE__), $needle) !== false) {
        ...
    

    【讨论】:

    • 有趣。我想这在某种程度上是一种 hack(换句话说,不是一种融入框架的方法)但是我看不到目录名称“供应商”很快就会改变,所以它可能足够可靠。谢谢。
    • 好吧,没有官方的方法可以解决这个问题,因为无论它位于这两个文件夹中的哪个文件夹中,您的包都应该这样做。也许您想针对这个问题背后的真正问题提出一个新问题。
    • Manuel,仅供参考 -- strpos() 的参数顺序与您发布的相反:php.net/function.strpos
    • 糟糕,这就是您编写代码而不进行测试时得到的结果。更新了!
    猜你喜欢
    • 1970-01-01
    • 2016-08-29
    • 2010-10-05
    • 2013-07-17
    • 2018-05-11
    • 1970-01-01
    • 1970-01-01
    • 2017-08-14
    • 1970-01-01
    相关资源
    最近更新 更多