Как использовать фасады и библиотеки непосредственно из представлений

#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 способа продолжить :

  1. обычное поведение php: вы объявляете блок php в верхней части вашего file.blade.php

и там далее в вашем file.blade.php вы создаете, например

 <?php
   MongoClient::someMethod(...)
?>
  
  1. второй способ — это внедрение зависимости с атрибутом

    @inject(‘mongoExampleName’, ‘App Services MongoService’)

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

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

Удачи