Kirill
но на практике, если у человека есть доступ к ДЦ, то тут серт не поможет
Kirill
хотя, мб дырявый роутер где-то внутри сетки...
Kirill
ну это тоже такое
Юра
Плюс часто ещё даже не ваш лоад балансер уже перехватывает https и дальше вам уже http идёт
Юра
Всякие ингрес контроллеры как работают в gke например
Михаил
Михаил
Блин, родились видения сериала аля "Разделение" + "Силиконовая Долина"- но про огромную корпорацию в которой работают конкурирующие команды и пытаются при помощи "грязной игры" заработать себе место под солнцем.
Вот одна из арок будет про mitm
Lols Anti Spam
Олег, тебя заблокировали (spam)
Сообщение предлагает сомнительную возможность заработка с высокой доходностью и призывает писать в личные сообщения, что типично для спама и мошенничества.
Роман
Добрый день, можете подсказать что я не так делаю?
падает на фабрике
2) App\Tests\Form\OrderFormTypeTest::testSubmitInvalidData
ArgumentCountError: Too few arguments to function App\Form\OrderFormType::__construct(), 0 passed in /media/roman/383be9ee-c114-4bf8-8956-66b985661cb4/home/awesome_projects/store/vendor/symfony/form/FormRegistry.php on line 78 and at least 1 expected
Михаил
(не относящиеся к вопросу) какой-то OrderFormType слишком умный. Забирает в конструктом ВЕСЬ ParameterBag из контейнера
Михаил
Щас покапался - формы вроде вооще не через конструктор конфигурируются, а через configureOptions
Сама форма не через фабрику а через formBuilder - методом add указываешь название поля, FQCN типа и опции, описанные в configureOptions
Но если нужно указать параметры в конструктор то это делается как описано тут https://symfony.com/doc/current/form/create_custom_field_type.html#passing-variables-to-the-form-type-template
Роман
да переделал в симфони вообще это так не работает
#[Route('/order', name: 'order')]
#[IsGranted('ROLE_USER')]
public function order(Request $request, OrderService $orderService, ContainerBagInterface $params): Response
{
$form = $this->createForm(OrderFormType::class, null, [
'services' => (require $params->get('dictionaries'))['services'],
]);
}
$form = $this->factory->create(OrderFormType::class, null, [
'services' => (require dirname(__DIR__, 2) . '/config/dictionaries.php')['services']
]);
class OrderFormType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder
->add('service', ChoiceType::class, [
'choices' => $options['services'],
'placeholder' => 'Выберите услугу',
])
});
}
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'services' => [], // Опция по умолчанию
]);
}
}
Роман
а можно и так
// Создание формы с передачей необходимых параметров
$form = $this->factory->create(OrderFormType::class, null, [
'services' => (require dirname(__DIR__, 2) . '/config/dictionaries.php')['services']
]);
class OrderFormType extends AbstractType
{
public function __construct(private ?ContainerBagInterface $params = null)
{
}
/**
* @throws ContainerExceptionInterface
* @throws NotFoundExceptionInterface
*/
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'services' => $this->params ? (require $this->params->get('dictionaries'))['services'] : []
]);
}
}
#[Route('/order', name: 'order')]
#[IsGranted('ROLE_USER')]
public function order(Request $request, OrderService $orderService): Response
{
$form = $this->createForm(OrderFormType::class);
$form->handleRequest($request);
}
```
Михаил
да переделал в симфони вообще это так не работает
#[Route('/order', name: 'order')]
#[IsGranted('ROLE_USER')]
public function order(Request $request, OrderService $orderService, ContainerBagInterface $params): Response
{
$form = $this->createForm(OrderFormType::class, null, [
'services' => (require $params->get('dictionaries'))['services'],
]);
}
$form = $this->factory->create(OrderFormType::class, null, [
'services' => (require dirname(__DIR__, 2) . '/config/dictionaries.php')['services']
]);
class OrderFormType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder
->add('service', ChoiceType::class, [
'choices' => $options['services'],
'placeholder' => 'Выберите услугу',
])
});
}
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'services' => [], // Опция по умолчанию
]);
}
}
Но если параметр конструктора тебе нужно получать из параметров контейнера, то просто настрой тип в самом контейнере, как я указал это в ссылке. Так код будет чище
Роман
Роман
buildView ?
Михаил
я не понял
Вот так лучше тип сконфигурировать
https://symfony.com/doc/current/form/create_custom_field_type.html#passing-variables-to-the-form-type-template
А не внутри коструктора этого типа шарится в ContainerBag
Роман
так ContainerBag это то что предлагает симфони, с кешированием конфига.
а require это чистый php
Роман
я искал аналог laravel config
Роман
я гружу массив из файла какой конфигурацией это сделать?
<?php
return [
'services' => []
];
Михаил
Я щас уже не за компом
Роман
мне форму добавить как сервис контейнер?
Роман
и передать параметр через DI?
Роман
App\Service\TravelLineService:
arguments:
$apiUrl: '%env(TL_API_URL)%'
тип такого?
Михаил
Открой ссылку там всё описано
Pavel
Народ объясните пж, почему в доктрину не хотят завести поддержку morph связей, как это сделано в элокенте? Это же сильно удобнее чем раздувать сущность, либо в ручную следить за всеми формами и запросами, чтобы вложенная сущность правильно обрабатывалась.
Я просто уже сижу пишу костыльный бандл для этого, вдруг у отсутствия этой фичи есть весомые корни
Юра
Юра
Работало
Юра
Наверное потому что это можно сделать и так и они не хотят просто переусложнять орм
Юра
Просто сделай доп сущность и все
Pavel
ну то есть да, у этого есть оверхед на то чтобы родительская сущность сначала записалась, чтобы получить ее id, если она новая, а уже потом сохранять дочернюю. Но если делать дочернюю с полями entityType и entityId, то он в любом случае будет.
Юра
Погоди я наверное не понял о чем ты
Юра
Что за морф связи
Pavel
Мой кейс такой: есть сущность Attachment и сущности Comment, Message и Post в которых может быть Attachment
Pavel
и тут либо раздувать бд и сущность Attachment, что не удобно в случае если появятся еще сущности которые захотят в себе иметь Attachment, либо в Attachment хранить entityType и entityId и ручками следить за этими "связями", что достаточно геморно
Павел
Юра
А embedded не подходит?
Михаил
Чот не понял, у коммента, сообщения и поста просто будут по своему аттачменту и всё
Anton
Pavel
Anton
да
У доктрины есть такое, вроде
Юра
Ну у поста будет attachment_id и у кого-то ещё будет и что раздувать?
Михаил
ну да или через rel таблицы
Pavel
Михаил
нет - просто Attachment
Юра
Ты же можешь ссылаться на один аттачмент с несколькиз энтити
Pavel
я не уточнил что в родительских сущностях идет Collection<Attachment> my bad
Павел
Михаил
Comment --\
Message -------> Attachment
Post ----------/
Михаил
Михаил
Корневая сущность - не аттачмент
Pavel
да не то что бы, меня и односторонний доступ устроит
Anton
такое в Доктрине есть
Михаил
Вообще ормы - зло. Отучивайтесь
Павел
Павел
можно сделать и через single table вроде
Pavel
такое в Доктрине есть
ссыль на кусок доки можно?
Из того что я в ней читал это вариации суперкласса
Павел
http://jstructure.com/post/doctrine-entity-extending/
Pavel
single table это изменение схемы, если добавится еще одна корневая сущность
Anton
Павел
Особенно если не придерживаетесь валидности схемы (ручные миграции)
Павел
а возможно и валидная схема будет
Павел
в соседнем чате как то осбуждали, вроде даже работало
Михаил
Чот кажется лучше наследованием (по правилам доктрины) это сделать
Через дескриминаторы - очень странный дизайн. Логику этой сущности придётся через switch case делать, зачем?
Павел
Anton
Pavel
Я как то на другом проекте пробовал использовать дискриминаторы и там были какие-то костыли которые мне сильно не понравились
Михаил
Ну и типо сущность пост знает что её файлы - это файлы поста, а вот сам Attachment не знает что он файл поста, нужно каждый раз сверятся
Михаил
Павел
Там есть разные типы наследвания
Pavel
с полиморфной связью удобно что в случае необходимости можно вытянуть из вложенной сущности родительскую, например, если понадобится собрать список всех аттачей пользователя с ссылками на то где используется
Михаил
Это решается чистым sql