Symfony: наконец, как использовать библиотеку PHP ядра ядра на v4-v5? - PullRequest
0 голосов
/ 25 октября 2019

Так что предметом является вопрос. Да, я искал этот форум и тоже погуглил. Все, что у меня есть - бесполезные документы и подборки Symfony, некоторые общие советы, клипы и ничего конкретного. Может быть, Yahoo или DuckDuck могли бы помочь лучше?

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

Нет, моя библиотека не является композитором или каким-либо другим пакетом. Нет, библиотечные методы не возвращают объекты Response. Нет, я не имею дело с композитором или перекомпиляцией или cli (я использую Composercat). Нет, я не буду помещать библиотеку в github или packagist, чтобы загружать ее через композитор или что-то еще, потому что это частная библиотека.

Извините за эмоциональную не по теме.

О случае: я поместил мою библиотеку в папку

src/lib/MyLibrary.php

Я подозреваю, что класс библиотеки загружается автоматически, потому что если я не расширяю Controller с его помощью (если я объявляю class MyLibrary вместо class MyLibrary extends Controller) - Symfony выкладывает ошибку «используется имя класса».

Итак, вопрос: в моем контроллере, как вызвать метод библиотеки?

$this->get('MyLibrary') не работает.

echo print_r($this) также не показывает MyLibrary в этом реестре,

Похоже, файл библиотеки загружен, но не зарегистрирован и / или не создан. Если это так, то где указать Symfony, чтобы зарегистрировать его?

1 Ответ

1 голос
/ 25 октября 2019

Так что большая часть этого вопроса действительно о том, как php управляет классами. Не так много о Symfony. Но это нормально.

Для начала лучше всего переместить project / src / lib в просто project / lib. В Symfony есть кое-что сканирующее, что происходит в каталоге src, и вы действительно не хотите, чтобы ваша библиотека была в нем смешана.

Итак:

# lib/MyLibrary.php
namespace Roman;

class MyLibrary
{
    public function hello()
    {
        return 'hello';
    }
}

Обратите внимание, что я добавил пространство имен(Роман), чтобы отличить ваш код от кода Symfony.

Теперь вам нужно настроить composer.json, чтобы позволить php автоматически загружать ваши классы:

    "autoload": {
        "psr-4": {
            "App\\": "src/",
            "Roman\\": "lib/"
        }
    },

После добавления римской строки,запустите «composer dump-autoload» для регенерации файлов автозагрузки.

После этого достаточно просто использовать обычный php внутри вашего приложения:

# src/Controller/DefaultController.php
namespace App\Controller;

use Roman\MyLibrary;
use Symfony\Component\HttpFoundation\Response;

class DefaultController
{
    public function index()
    {
        $myLibrary = new MyLibrary();
        $hello = $myLibrary->hello();
        return new Response($hello);
    }
}

И это должно помочь вам начать работу. .

...