Я хочу определить некоторые методы, которые могут быть использованы в нескольких местах или нескольких контроллерах. По сути, эти методы будут похожи на библиотеки, которые будут выполнять несколько запросов.
Моя главная цель — избежать многократного написания общей логики путем создания некоторых библиотек.
Пожалуйста, помогите мне с этим.
Заранее спасибо 🙂
Зависит от того, что вы пытаетесь сделать. Вот несколько вариантов:
По умолчанию все ваши контроллеры расширяются 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);
}
}
это просто, создайте свою собственную библиотеку в своем 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
Вы можете создать папку с именем lib и внутри нее файл functions.php и в composer.json
...
"autoload": {
"files": [
"app/lib/functions.php"],
...
и запустите composer dump-autoload
Используйте вспомогательные классы и создавайте в них общие функции.
Создайте папку с именем helper в папке приложения и создайте в ней класс помощника. А затем используйте функцию этого вспомогательного класса в нескольких контроллерах или представлениях, как вы хотите.