Laravel использовать метод в разных контроллерах
У меня есть метод который я использую в разных контроллерах, на примере лога данных , как я могу вынести метод куда нибудь отдельно и его просто использовать ? Что мне для этого нужно сделать в Laravel ?
Ответы (3 шт):
Вот решение из англоязычного стака:
От себя добавлю, что все методы в созданном классе желательно делать статичными, например:
namespace App\Helper;
use Illuminate\Support\Facades\Auth;
class Helper
{
private static authorized()
{
return Auth::check();
}
}
если метод статичен, вам не придётся создавать объект класса, достаточно будет в контроллере вызвать:
Helper::auth();
У вас есть App/Http/Controllers/Controller.php, который по-умолчанию наследуют все остальные контроллеры, например, ExampleController, созданный для примера
<?php
namespace App\Http\Controllers;
class ExampleController extends Controller
{
//
}
Просто напишите там свой метод, он станет доступен автоматически всем наследникам.
Можно создать файл helpers.php и разместить его (как пример) в каталоге app
Добавить данный файл в автозагрузку внеся изменения в файл composer.json в секцию autoload. Затем выполнить composer update
"autoload": {
"psr-4": {
"App\\": "app/",
"Database\\Factories\\": "database/factories/",
"Database\\Seeders\\": "database/seeders/"
},
"files": [
"app/helpers.php"
]
},
Теперь при необходимости вы можете добавлять любые функции в созданный файл и они будут доступны из любого места приложения. Например:
<?php // helpers.php
function calc($a, $b)
{
return $a+$b;
}
и далее в проекте использовать просто вызов calc(2,3)
Можно использовать как в шаблонах blade так и в контроллерах и всех созданных классах.
Также в данном файле вы сможете использовать все фасады и встроенные функции laravel.