Laravel 辅助函数 base_path() 失败

Posted

技术标签:

【中文标题】Laravel 辅助函数 base_path() 失败【英文标题】:Laravel helper function base_path() failing 【发布时间】:2014-04-19 01:28:41 【问题描述】:

我正在模型类中访问 Laravel 的辅助函数 base_path()。我正在运行 Laravel 4.1.23

我收到以下错误:

    php Fatal error:  Call to a member function make() on a non-object in /Applications/mampstack-5.4.23-0/frameworks/laravel/vendor/laravel/framework/src/Illuminate/Support/helpers.php on line 492

奇怪的是我在 phpunit 中测试了函数调用,它运行良好。任何帮助将不胜感激。

我的项目有以下依赖:

"require": 
        "laravel/framework": "4.1.*",
        "cpliakas/git-wrapper": "1.1.*",
        "rmccue/requests": "v1.6.0",
        "phpseclib/phpseclib": "0.3.*"
    

【问题讨论】:

不确定问题是否相关,但似乎在 Github 上的同一错误消息下存在错误,这是链接:github.com/laravel/framework/issues/854 编辑: 这里是我挖出的另一个也指向 helpers.php 文件:github.com/patricktalmadge/bootstrapper/issues/125 你运行 composer dump-autoload 了吗? 我确实运行了转储自动加载。我相信问题是我只是通过从命令行运行“php mymodel.php”来运行我的模型测试。我在类定义之后测试了一些小事情。我认为这是问题的原因是因为它适用于 phpunit。 这听起来很可信。直接运行模型测试意味着您绕过了关键框架组件的加载——因此是非对象。 【参考方案1】:

Laravel 告诉你它不能在非对象上执行 make()。如果是这样的话:

 app()->make('path.base').($path ? '/'.$path : $path);

非对象是函数的返回值

 app()

这可能已被您的某个包或自己的助手覆盖。这是创建此函数的代码:

if ( ! function_exists('app'))

    /**
     * Get the root Facade application instance.
     *
     * @param  string  $make
     * @return mixed
     */
    function app($make = null)
    
        if ( ! is_null($make))
        
            return app()->make($make);
        

        return Illuminate\Support\Facades\Facade::getFacadeApplication();
    

如你所见,Laravel 不会创建它,除非它不存在。尝试执行:

var_dump( app() );

在您的模型中查看您的回报。它必须以

开头
object(Illuminate\Foundation\Application)[2]
  protected 'booted' => boolean true
  protected 'bootingCallbacks' => 
    array (size=0)

如果不是Illuminate\Foundation\Application的对象,尝试查找app()函数在哪里,停止使用。

【讨论】:

以上是关于Laravel 辅助函数 base_path() 失败的主要内容,如果未能解决你的问题,请参考以下文章

在单元测试 setUp 方法中调用路径辅助函数会引发错误

laravel怎么获取到public路径

laravel框架常用目录路径

laravel怎么获取到public路径

laravel获取不同目录文件夹路径的函数

laravel 怎么获取public路径