Невозможно использовать помощник в контроллере приложения laravel

Я создаю приложение, теперь я создал помощник

class Students{
    public static function return_student_names()
    {
        $_only_student_first_name = array('a','b','c');
        return $_only_student_first_name;
    }
}

теперь я не могу сделать что-то подобное в контроллере

namespace App\Http\Controllers;
    class WelcomeController extends Controller
    {
        public function index()
        {
            return view('student/homepage');
        }
        public function StudentData($first_name = null)
        {
            /* ********** unable to perform this action *********/
            $students = Student::return_student_names();
            /* ********** unable to perform this action *********/
        }
    }

это мой помощник

namespace App\Providers;

use Illuminate\Support\ServiceProvider;


class HelperServiceProvider extends ServiceProvider
{

    /**
     * Register the service provider.
     *
     * @return void
     */
    public function register()
    {
        foreach(glob(app_path().'/Helpers/*.php') as $filename){
            require_once($filename);
        }
    }
}

Событие i добавило его как псевдоним в файл config/app.php

'Student' => App\Helpers\Students::class,

2 ответа

Попробуйте положить use App\Helpers\Student; в верхней части вашего контроллера под delcaration пространства имен:

namespace App\Http\Controllers;

use App\Helpers\Student;

class WelcomeController extends Controller
{
    // ...

Посмотрите больше на пространства имен PHP и то, как они используются, я думаю, что вы можете иметь недостаточное понимание о них. Их единственная цель - сделать так, чтобы вы могли называть и использовать два класса с одинаковым именем (например, App\Helpers\Student против возможно App\Models\Student). Если вам нужно использовать оба этих класса внутри одного и того же исходного файла, вы можете использовать псевдоним одного из них следующим образом:

use App\Helpers\Student;
use App\Models\Student as StudentModel;

// Will create an instance of App\Helpers\Student
$student = new Student(); 
// Will create an instance of App\Models\Student
$student2 = new StudentModel(); 

Вам не нужно иметь поставщика услуг для этого, только обычные языковые функции. Для этого вам понадобится поставщик услуг, если вы хотите отложить создание объекта Student до IoC:

public function register()
{
    $app->bind('App\Helpers\Student', function() {
        return new \App\Helpers\Student;
    });
}

// ...
$student = app()->make('App\Helpers\Student');

Вы никогда не должны include или же require файл класса в laravel, потому что это одна из функций, которые предоставляет композитор.

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

class Students{
    public static function return_student_names()
    {
        $_only_student_first_name = array('a','b','c');
        return $_only_student_first_name;
    }
}

все его методы должны быть статическими

Вы правильно добавили Фасад:

'Student' => App\Helpers\Students::class,

Наконец, похоже, что ваша проблема вызвана тем, что вы забыли обратную косую черту в имени фасада. Пользы \Students вместо Students:

public function StudentData($first_name = null)
{
    $students = \Student::return_student_names();
}

При использовании фасада, нет необходимости делать любые включения, фасады были сделаны так, чтобы избежать сложных включений повсюду.

Другие вопросы по тегам