Определение методов, которые можно использовать в нескольких контроллерах (в короткой библиотеке) в laravel 5

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

Моя главная цель — избежать многократного написания общей логики путем создания некоторых библиотек.

Пожалуйста, помогите мне с этим.

Заранее спасибо 🙂

5

Решение

Зависит от того, что вы пытаетесь сделать. Вот несколько вариантов:

По умолчанию все ваши контроллеры расширяются App\Http\Controllers\Controller учебный класс. Просто поместите всю общую логику между контроллерами.

Для сложных запросов к базе данных вы можете создать репозиторий и внедрить его в контроллеры.

class UserRepository {
public function getActiveUsers() {
return Users::with('role')
->where('...')
->someQueryScopes()
->anotherQueryScope()
->yetAnotherScope();
}
}

class SomeController extends Controller {
public function index(UserRepository $repository) {
$users = $repository->getActiveUsers();
return view('users.index')->withUsers($users);
}
}

Еще один вариант — создать классы Service для бизнес-логики и внедрить их в конструктор или соответствующие методы.

 class UserCreatorService {
public function create($email, $password){
$user = User::create(['email' => $email, 'password' => $password]);
$user->addRole('Subscriber');
Event::fire(new UserWasCreated($user));
return $user;
}
}

class RegisterController extends Controller {
public function store(Request $request, UserCreatorService $service) {
$user = $service->create($request->input('email'), $request->input('password'));
return view('home')->withUser($user);
}
}
4

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

это просто, создайте свою собственную библиотеку в своем app затем создайте новый файл MyLibrary.php

namespace App;

Class MyLibrary {

public static function sum($a, $b) {
return $a + $b;
}

}

затем создайте псевдоним в вашем config/app.php

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

и, наконец, вы можете вызвать его в любом месте вашего контроллера

$result = MyLibrary::sum(4, 5); // your $result now have value of 9
1

Вы можете создать папку с именем lib и внутри нее файл functions.php и в composer.json

...
"autoload": {
"files": [
"app/lib/functions.php"],
...

и запустите composer dump-autoload

0

Используйте вспомогательные классы и создавайте в них общие функции.

Создайте папку с именем helper в папке приложения и создайте в ней класс помощника. А затем используйте функцию этого вспомогательного класса в нескольких контроллерах или представлениях, как вы хотите.

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