Невозможно использовать помощник в контроллере приложения 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);
}
}
}

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

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

0

Решение

Попробуйте положить 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, потому что это одна из функций, которые композитор обеспечивает.

1

Другие решения

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

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();
}

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

1

По вопросам рекламы [email protected]