Laravel自定义助手 - 未定义索引SERVER_NAME

时间:2016-03-07 06:09:35

标签: php laravel laravel-5.1

在Laravel 5.1中,我创建了一个自定义帮助文件:custom.php我加载到composer.json

"autoload": {
    "files": [
        "app/Helpers/custom.php"
    ]
},

它包含这个方法:

function website() {
    return str_replace('dashboard.', '', $_SERVER['SERVER_NAME']);
}

它按预期工作,但每次执行php artisan命令时,我都会收到一个调用堆栈并显示以下消息:

Notice: Undefined index: SERVER_NAME in /path/to/custom.php on line 4

为什么会这样?从我的Laravel应用程序中运行时,该方法返回正确的值。

3 个答案:

答案 0 :(得分:5)

$ _ SERVER [' SERVER_Name']全局变量只有在通过浏览器运行应用程序时才可访问。通过php-cli /终端运行应用程序时会出错。将您的代码更改为

function website() {

    if(php_sapi_name() === 'cli' OR defined('STDIN')){
        // This section of the code runs when your application is being runned from the terminal
        return "Some default server name or you can use your environment to set your server name"
    }else{
        // This section of the code run when your app is being run from the browser
        return str_replace('dashboard.', '', $_SERVER['SERVER_NAME']);
    }
}

希望这会对你有所帮助。

答案 1 :(得分:3)

Artisan在命令行上工作,因此没有SERVER_NAME。使用类似的东西:

Request::server('SERVER_NAME', 'UNKNOWN')

而不是$ _SERVER []提供默认值以避免错误。

答案 2 :(得分:1)

也许是因为当您经常运行此帮助程序时,SERVER_NAME中有一些内容,因为您是从浏览器运行它。

当您运行Artisan命令时,没有任何服务器,这就是SERVER_NAME为空的原因。