Создание и доступ к помощнику в контроллере

Я создал вспомогательный файл в папке App с именем Helper.php.

приложение/Helper.php

<?php

namespace App;

use Illuminate\Support\Facades\DB;

class Helper {

    public function get_username($user_id) 
    {
        $user = DB::table('users')->where('userid', $user_id)->first();

        return (isset($user->username) ? $user->username : '');
    }
}

app/Providers/HelperServiceProvider.php

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;

class HelperServiceProvider extends ServiceProvider
{
    public function boot()
    {
        //
    }

    public function register()
    {
        require_once app_path() . 'Helper.php';
    }
}

config/app.php

Внутри массива провайдера...

App\Providers\HelperServiceProvider::class,

Внутри массива aliases...

'Helper' => App\Helper::class,

Все работало нормально, но теперь у меня есть следующая ошибка.

ErrorException с сообщением "Нестатический метод Helper::get_username($user->id) не должен вызываться статически

Но когда я добавляю ключевое слово static, оно работает нормально. В чем разница между статическими и нестатическими методами?


person Manojkiran.A    schedule 18.01.2019    source источник


Ответы (1)


Псевдонимы дают вам возможность получить доступ к фасаду в шаблоне блейда, не добавляя его в шаблон (см. оператор использования). При вызове метода через фасад вы вызываете этот метод статически, и фасад будет вызывать объект класса, содержащего этот метод.

В Laravel обычно удобнее создать файл, содержащий хелперы, как это делает Laravel, и автоматически загрузить этот файл через composer.

Дополнительную информацию см. здесь

person Nikolay Traykov    schedule 21.01.2019