#php #laravel
#php #laravel
Вопрос:
У меня есть довольно стандартная настройка приложения Laravel и множество внешних библиотек, установленных через Composer.
Laravel выполняет всю поддержку, извлекая .env
переменные и устанавливая соединения с базой данных. В верхней части каждого контроллера, который у меня есть, например:
namespace AppHttpControllersUsers;
use GuzzleHttp;
use MongoClient;
class UsersController extends Controller {
public function index() {
return "foobar";
}
}
Я хотел бы знать, как требовать существующие фасады и подключения к БД в моих представлениях. Я понимаю, что это плохая практика, но я действительно хотел бы понять, как использовать, например MongoClient
, непосредственно из представления.
Спасибо!
Комментарии:
1. если это фасад:
MongoClient::someMethod(...)
… он находится в корневом пространстве имен, просто используйте его… если вам нужен экземпляр чего-либо, есть@inject
директива blade для внедрения экземпляра чего-либо
Ответ №1:
поскольку Laravel использует шаблон MVC (Model Vue Controller), я могу подтвердить, что это действительно плохая практика, и я действительно не рекомендую это делать.
то, чего вы хотите достичь, можно рассматривать как внедрение зависимостей (но на самом деле это не так)
есть 2 способа продолжить :
-
обычное поведение php: вы объявляете блок php в верхней части вашего file.blade.php
и там далее в вашем file.blade.php вы создаете, например
<?php
MongoClient::someMethod(...)
?>
-
второй способ — это внедрение зависимости с атрибутом
@inject(‘mongoExampleName’, ‘App Services MongoService’)
Но тогда вам нужно создать для него сервисный контейнер и связать его с поставщиком услуг.
В конце концов, я действительно не рекомендую это, это было просто для того, чтобы показать возможности.
Удачи