Laravel: как инициировать глобальные библиотеки

У меня
app / Библиотеки / Cart.php
app / Библиотеки / Currency.php
app / Библиотеки / SomeOther1.php
app / Библиотеки / SomeOther2.php
...

Во всех своих контроллерах я не хочу "использовать" и объявлять.
Я не хочу этого:

<?php
namespace App\PathToFolder;

use App\Libraries\Cart;
use App\Libraries\Currency;

class SomeController extends Controller
{
  public someFunction()
  {
    $this->cart = new Cart;
    $this->cart->add(...);
    $this->cart->remove(...);
    $this->cart->clear(...);

    $this->currency = new Currency;
    $this->currency->format(...);
  }

я хочу этот

<?php
namespace App\PathToFolder;

class SomeController extends Controller
{
  public someFunction()
  {
    $this->cart->add(...);
    $this->cart->remove(...);
    $this->cart->clear(...);
    $this->currency->format(...);
  }

Нет строк «пользование» и «новое». Как сделать? поставщик услуг? промежуточное ПО?

Это тоже допустимо:

$this->library->cart->add(...);  
$this->library->cart->remove(...);  
$this->library->cart->clear(...);  
$this->library->currency->format(...);  

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

Hussein 09.04.2018 05:12

вы должны использовать одно «использование» при использовании функции репозитория

afsal c 09.04.2018 06:03
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
2
469
3

Ответы 3

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

<?php
namespace App\PathToFolder;

class SomeController extends Controller
{
  public someFunction()
  {
    $this->cart = new \App\Libraries\Cart;
    $this->cart->add(...);
    $this->cart->remove(...);
    $this->cart->clear(...);

    $this->currency = new \App\Libraries\Currency;
    $this->currency->format(...);
  }

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

Я создал новые помощники по вызову папок и создал новое имя класса helpers.php

в разделе автозагрузки в composer.json добавьте в него свой вспомогательный класс ..

"autoload": {
    ...
    "files": ["app/Helpers/helpers.php"]
},

запустить composer dumpautoload

и в классе helper.php .. см. образец ниже

if (! function_exists('get_cart')) {

    function get_cart()
    {
       return new Cart();
    }
}

Применение:

get_cart()->add(...);
get_cart()->remove(...);

ИЛИ ЖЕ

ЕСЛИ вы не хотите использовать вспомогательный класс. Просто сделайте статический класс

Применение:

Cart::add(...)
Cart::remove(...)

ИЛИ ЖЕ

используйте Черта характера, но все же вы используете $this в $this->cart->add

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

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

Например,

Ваш родительский контроллер в соответствии с вашим кодом

<?php

 namespace App\Http\Controllers;

 use Illuminate\Foundation\Bus\DispatchesJobs;
 use Illuminate\Routing\Controller as BaseController;
 use Illuminate\Foundation\Validation\ValidatesRequests;
 use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
 use App\Libraries\Cart;
 use App\Libraries\Currency;

 class Controller extends BaseController
 {
    use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
    private $cart;
    private $currency;

    public function __construct()
    {
        //blockio init
        $this->cart = new Cart;
        $this->currency = new Currency; 
    }

 }

Теперь вы можете использовать эту функцию в своем контроллере следующим образом

<?php
namespace App\PathToFolder;

class SomeController extends Controller
{
  public someFunction()
  {
    $this->cart->add(...);
    $this->cart->remove(...);
    $this->cart->clear(...);
    $this->currency->format(...);
  }

Другие вопросы по теме