Форум программистов, компьютерный форум, киберфорум
PHP: Symfony
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
 Аватар для tarasalk
1992 / 1216 / 440
Регистрация: 13.06.2013
Сообщений: 4,115

private form.factory Symfony 6

30.06.2022, 13:54. Показов 2737. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В симфони 6 сервис form.factory сделали приватным.
Но при этом в framework-bundle (часть симфони) есть AbstractController, который создает форму именно через контейнер и конечно же падает ошибкой.
PHP
1
$this->container->get('form.factory')->create()
The "form.factory" service or alias has been removed or inlined when the container was compiled. You should either make it public, or stop using the container directly and use dependency injection instead.

Я может чего-то не понимаю но как так-то? И таких приватных сервисов много.
p.s. я в процессе обновления симфони с 2 до 6
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
30.06.2022, 13:54
Ответы с готовыми решениями:

Symfony 2.7 Entity Public Private Protected
Всем привет, только изучаю symfony, столкнулся с такой проблемой: В твиг шаблоне с помощью for вывожу записи из БД, в сущности таблицы...

Symfony form, передача параметров
Моя цель передать код товара чтобы сделать более эффективный запрос. Комменты внутри кода. Если кто знает другой способ передать в ...

Symfony form как сервис
Как создать форму обьявленую как сервис в контролере? services: cms.form.type.user: class: CmsBundle\Form\UserType ...

5
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
30.06.2022, 21:37
Велика вероятность, что у дочернего контроллера в свойстве container содержится объект Symfony\Component\DependencyInjection\Container, в то время как в новом проекте на Symfony 6 там микро-контейнер Symfony\Component\DependencyInjection\Argument\ServiceLocator, который работает только с зависимостями конкретного контроллера (они перечислены в AbstractController::getSubscribedService s).
1
 Аватар для tarasalk
1992 / 1216 / 440
Регистрация: 13.06.2013
Сообщений: 4,115
01.07.2022, 10:28  [ТС]
Попробовал принудительно Symfony\Component\DependencyInjection\Argument\ServiceLocator передать, теперь такое пишет Service "form.factory" not found: the container inside "ApiBundle\Controller\OrderController" is a smaller service locator that only knows about the "integration",...
Но вообще да, можно в эту сторону покопать.

Я еще заметил что framework-bundle поддерживает симфони 5 и 6, возможно часть кода работает только в 5, а в 6 уже нет
0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
01.07.2022, 11:24
Цитата Сообщение от tarasalk Посмотреть сообщение
Попробовал принудительно ... передать
А контейнер до этого "вручную" передавался контроллеру или нет?

Если нет, то Symfony автоматически ServiceLocator должен передать. Делается это в var/cache/dev/Container(тут цифро-буквы)/get(имя контроллера)Service.php
Т.е. Symfony автоматически генерирует PHP-код сервиса, в котором будет производиться запуск контроллера. Зависимости он берёт из ранее упомянутого метода getSubscribedServices.

Цитата Сообщение от tarasalk Посмотреть сообщение
теперь такое пишет
Видимо, не так ServiceLocator создали.

Для тестового контроллера "LuckyController" в кэше генерируется вот такое:
Кликните здесь для просмотра всего текста
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
<?php
 
namespace ContainerSz095oK;
 
use Symfony\Component\DependencyInjection\Argument\RewindableGenerator;
use Symfony\Component\DependencyInjection\Exception\RuntimeException;
 
/**
 * @internal This class has been auto-generated by the Symfony Dependency Injection Component.
 */
class getLuckyControllerService extends App_KernelDevDebugContainer
{
    /**
     * Gets the public 'App\Controller\LuckyController' shared autowired service.
     *
     * @return \App\Controller\LuckyController
     */
    public static function do($container, $lazyLoad = true)
    {
        include_once \dirname(__DIR__, 4).''.\DIRECTORY_SEPARATOR.'vendor'.\DIRECTORY_SEPARATOR.'symfony'.\DIRECTORY_SEPARATOR.'framework-bundle'.\DIRECTORY_SEPARATOR.'Controller'.\DIRECTORY_SEPARATOR.'AbstractController.php';
        include_once \dirname(__DIR__, 4).''.\DIRECTORY_SEPARATOR.'src'.\DIRECTORY_SEPARATOR.'Controller'.\DIRECTORY_SEPARATOR.'LuckyController.php';
 
        $container->services['App\\Controller\\LuckyController'] = $instance = new \App\Controller\LuckyController();
 
        $instance->setContainer((new \Symfony\Component\DependencyInjection\Argument\ServiceLocator($container->getService, [
            'form.factory' => ['privates', 'form.factory', 'getForm_FactoryService', true],
            'http_kernel' => ['services', 'http_kernel', 'getHttpKernelService', false],
            'parameter_bag' => ['privates', 'parameter_bag', 'getParameterBagService', false],
            'request_stack' => ['services', 'request_stack', 'getRequestStackService', false],
            'router' => ['services', 'router', 'getRouterService', false],
            'security.authorization_checker' => ['privates', 'security.authorization_checker', 'getSecurity_AuthorizationCheckerService', false],
            'security.csrf.token_manager' => ['privates', 'security.csrf.token_manager', 'getSecurity_Csrf_TokenManagerService', true],
            'security.token_storage' => ['privates', 'security.token_storage', 'getSecurity_TokenStorageService', false],
            'serializer' => ['privates', 'serializer', 'getSerializerService', true],
            'twig' => ['privates', 'twig', 'getTwigService', false],
        ], [
            'form.factory' => '?',
            'http_kernel' => '?',
            'parameter_bag' => '?',
            'request_stack' => '?',
            'router' => '?',
            'security.authorization_checker' => '?',
            'security.csrf.token_manager' => '?',
            'security.token_storage' => '?',
            'serializer' => '?',
            'twig' => '?',
        ]))->withContext('App\\Controller\\LuckyController', $container));
 
        return $instance;
    }
}
0
 Аватар для tarasalk
1992 / 1216 / 440
Регистрация: 13.06.2013
Сообщений: 4,115
01.07.2022, 14:52  [ТС]
Нашел похожий код, именно form.factory итп там не сгенерировались. Там есть только то что в конструктор передано.
0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
01.07.2022, 16:27
Цитата Сообщение от tarasalk Посмотреть сообщение
именно form.factory итп там не сгенерировались. Там есть только то что в конструктор передано.
И при этом ваш контроллер унаследован от Symfony\Bundle\FrameworkBundle\Controller\AbstractController?
Интересно. Можете сам контроллер показать?

Кстати, там может несколько директорий с названиями Container(тут набор букв) создаться. Но это неважно, в принципе: раз контроллер не имеет доступа к form.factory, значит нет смысла по другим директориям сервис разыскивать...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.07.2022, 16:27
Помогаю со студенческими работами здесь

Шаблоны проектирования: Factory Method и Abstract Factory. Приватная почтовая служба
Нужна помощь с двумя шаблонами проектирования Factory Method и Abstract Factory. Есть предметная область - приватная почтовая служба,...

Чем отличается Abstract Factory и Factory Method
Чем отличается Abstract Factory и Factory Method !

Из private сделать private static
Суть такая: есть созданный класс Note (в нем описан несколько значений для объекта класса). Так же создан еще один класс. В нем ...

Form.Hide ; Form.Close ; Form.Show
Здравствуйте. Вот интересует один вопрос, в чём различие между Form1.Close; Form2.Show и Form2.Show; Form1.Close? Т.е. в 1 случае сперва...

External exception C000001D между Form.OnCreate и Form.OnShow
Поставил Delphi 10.3 Rio, так как в нём, вроде бы, наконец исправили очень важный для меня момент - Z-Order для нативных контролов. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru