2016-03-07 2 views
1

В Laravel 5.1, я создал пользовательский вспомогательный файл: custom.php который я загружаю в composer.json:Laravel пользовательский помощник - не определен индекс SERVER_NAME

"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.

+0

в вашем композиторе используйте этот код 'composer dump-autoload -o' – aldrin27

ответ

3

$ _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']); 
    } 
} 

Надеюсь, это вам поможет.

3

Artisan работает в командной строке, поэтому SERVER_NAME не существует. Используйте что-то вроде:

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

вместо $ _SERVER [], чтобы обеспечить по умолчанию, чтобы избежать ошибки.

+0

Я получаю' Fatal error: Class 'Request' not found'. Я просто 'isset ($ _ SERVER ['SERVER_NAME'])' на данный момент :) Спасибо – Obay

+0

@Obay - вам, вероятно, нужно «использовать запрос»; в вашем контроллере, и было бы лучше использовать код/​​семантику Laravel, где вы можете сохранить согласованность. – markdwhite

+0

Я это сделал, но он сказал: «Операция использования с не-составным именем« Запрос »не влияет на /path/to/custom.php в строке 3'. Поэтому я добавил «namespace App \ Helpers;», но это испортило мои другие вспомогательные функции, они больше не могли быть найдены другими частями кода. – Obay

1

Возможно, это связано с тем, что при запуске этого помощника, как обычно, у SERVER_NAME есть что-то, потому что вы запускаете его из браузера.

Когда вы запускаете команду Artisan, нет ни одного сервера, поэтому SERVER_NAME пуст.

Смежные вопросы