Я создаю приложение, теперь я создал помощник
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,
Попробуйте положить 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();
}
При использовании фасада, нет необходимости делать какие-либо включения, фасады были сделаны, чтобы избежать сложных включений повсюду.