Как управлять классами в контроллере в laravel? - PullRequest
0 голосов
/ 31 марта 2020

В настоящее время я работаю над проектом, который теперь слишком сильно расширяется, так что теперь верхняя часть проекта каждого контроллера выглядит следующим образом.

use App\Helpers\Comments_Helper;
use App\Helpers\GetDeliveryRun_Helper;
use App\Helpers\Histories_Helper;
use App\Helpers\Notification_Helper;
use App\Helpers\Tables\TableHistory;
use Illuminate\Support\Facades\Queue;
use App\Helpers\Tables\TableManifest;
use App\Helpers\Tables\TableManifestConsignment;
use App\Http\Controllers\Controller;
use App\Models\Address;
use App\Models\Consignment;
use App\Models\Customer;
use App\Models\ConsignmentManifest;
use App\Models\Manifest;
use Auth;
use DB;
use File;
use Barryvdh\DomPDF\Facade as PDF;
use Illuminate\Http\Request;
use PhpOffice\PhpSpreadsheet\IOFactory;
use App\Jobs\ManifestPOD\ConsignmentDownload;
use App\Jobs\ManifestPOD\ConsignmentZipper;
use Maatwebsite\Excel\Facades\Excel;
use Response;

есть ли способ объявить эти классы глобально и использовать его в каждом контроллер. Какова наилучшая практика программирования для этой проблемы

Ответы [ 3 ]

2 голосов
/ 31 марта 2020

Если это список используемых классов в вашем контроллере , то вы неправильно используете контроллеры: почему бы не поместить такие вещи в другие классы и сократить код в контроллере до минимальных частей: оценить введите, передайте его другим (!) сервисам, которые вычисляют результат, и верните результат.

Этот метод разделения делает ваши сервисы тестируемыми. Например, как бы вы протестировали генерацию PDF или Excel из контроллера? Создавая запрос первым? Нет, вероятно, такому поколению нужны только крошечные части всего того, что вы делаете в контроллере. И должно ли это поколение быть напрямую связанным с базой данных, чтобы вам сначала нужно было создавать объекты базы данных для создания PDF? Нет, читайте такие вещи из БД, создавайте объекты данных и передавайте их потребляющим службам - и вдруг вы можете создать DTO в тесте, передать их генерации Excel и проверить, работает ли это без создания запросить объект или заполнить базу данных с помощью фиксаторов

0 голосов
/ 31 марта 2020

Это классы зависимостей, используемые в этом контроллере. Вы можете глобально автоматически загрузить все эти пространства имен в файле composer. Но это не рекомендуется.

На скриншоте я чувствую, что у вас одна из худших планов кода. Здесь классы вашего контроллера выглядят как Бог-класс

Все ваши логики c могут быть извлечены из вашего контроллера в другой класс ( один ответственный класс обслуживания или класс действия ). Таким образом, ваш класс контроллера мог бы хорошо управляться с помощью тощих методов и меньшего количества зависимостей.

Если вам интересно, я создал один laravel шаблон с организованными структурами вложенных папок. PS: я предпочитаю вложенный каталог вместо простого , но вы также можете go с плоским каталогом.

https://github.com/puncoz-official/laravel-boilerplate

0 голосов
/ 31 марта 2020

Я согласен с Nico Haase, но если вы все еще хотите сократить импорт, вы можете сделать это для пространства имен Helpers and Models. Вместо импорта каждой модели вы можете импортировать use App\Models;, а затем в те места, где вы используете класс из этого пространства имен, вы можете сделать Models\Address, Models\Consignment, et c. Вы можете сделать то же самое для пространства имен помощников. Также используйте такие фасады как \Auth, \DB, et c. вместо импорта.

...