Kirill
Подскажите часто вижу такие вот безсмысленные сообщения (типо как выше)
Скучно человеку. Общения ищет. Неужели непонятно?)
Юра
Мне кажется это какая-то ботня
Юра
Эй Виктор
Юра
Виктооооор. Ты бот?
Юра
Запятую забыл
Юра
В смысле - читай про миграции
Andrey
В смысле - читай про миграции
Понял, принял. Да вот завтра активно начну изучать, самому интересно понять как че к чему)
Юра
Там все изи. Команда диф, создает и записывает твой схема апдейт в файл миграции. Ты можешь его править. В бд создается таблица с выполненными миграциями. Доктрина сравнивает что в файловой системе и в таблице и понимает что накатить. Команда мигрейт накатывает, может откатывать
Юра
Все я сэкономил тебе день )
Юра
Проблемы начинаются с ветками. Если у тебя несколько веток разработки, надо не забывать откатывать миграции при переключении веток, либо юзать свою бд на каждую ветку
One
Привет. Представьте себе что есть контролер у которого в анотациях указано имя роута и права доступа /** * @Route("/user/profile", name="user_profile") * @Security("is_granted('user_index', 'permission')") */ public function indexAction(Request $request) { ... } Вопрос. Как в сервисе, имея только название роута, проверить доступен ли он юзеру?
One
Это нужно для построения меню в админке, что бы не показывать не доступные меню
A.D.🈴
Подскажите по фронту. Вот есть гугл-таблицы. Там забиваешь в ячейку число, оно сразу сохраняется. Нет ли какого-то "компонента" или условно готового решения, чтобы похожий фронт сделать - есть поля, в некоторые числа, в некоторых строки, в некоторых даты, в некоторых дропдауны. Нужно их менять и чтобы оно сразу в БД сохранялось (без нажатия "submit").
A.D.🈴
Так-то понятно через AJAX можно сделать, но возможно есть уже что-то готовое.
A.D.🈴
Ну да. Т.е. просто спокойно пилю, тут никаких волшебных пилюль не придумали? :) Спасибо.
Юра
Есть куча готовых
Юра
Наприме по поиску vue datagrid
Юра
Но сохранение естественно тебе надо самому прописать
Юра
Или vue spreadsheet
Юра
Или datable
Юра
Я даже находил платный оч крутой в дизайне аля эксель
Юра
Самому тоже можно написать. Но это не так просто как кажется. Много писанины в итоге
Юра
У меня были проблемы в основном с синхронизацией когда несколько юзеров правят
A.D.🈴
Не, доксы привел в пример только по принципу работы, я как раз от вида доксов уйти хочу. :) У меня это скорее как карточки в трелло будет.
A.D.🈴
И по идее, не должны несколько юзеров править, там маленький локальный проект. Условно 8 читателей, 1 писатель.
A.D.🈴
Самому тоже можно написать. Но это не так просто как кажется. Много писанины в итоге
Вот я и хотел уйти от писанины как раз. Это как бы не symfony way с ее d:c:c. :)
A.D.🈴
А. это так не сработает. Ну ты суть понял. :)
Andrey
Кто-нибудь сталкивался с проблемой когда в сонате OneToMany прикрепляем допустим к к одному проекту много новостей, то она как бы обновляет сущность проект но не прикрепляет те новости которые я выбрал чтобы прикрепить?
Andrey
Я нашёл решение этой проблемы
Andrey
Но только для админки)
Andrey
public function prePersist($project) { $this->preUpdate($project); } public function preUpdate($project) { $project->setNews($project->getNews()); }
Andrey
Вот таким образом выглядит\
Andrey
Но есть у меня ещё в сущности Projects вот такой метод
Andrey
/** * @ORM\PreUpdate * @param \Doctrine\ORM\Event\LifecycleEventArgs $event */ public function onPrePersist(LifecycleEventArgs $event, News $news) { if (false === empty($this->project)) { return; } foreach ($news as $new) { $this->news = $event->getEntityManager()->getReference(News::class, $new->getId()); } }
Andrey
И в этом случае он отрабатывает но news к project не прикрепляются
Andrey
ДУмаю по той же причине что и соната не прикрепляла
Andrey
Как это можно исправить?
Shokha
Привет всем! После смена username как-то можно без Logout обновить сесси этого пользователя! ато приходится заново авторизация сделать!
Юра
И в этом случае он отрабатывает но news к project не прикрепляются
Попробуй.в сеттере setNews пройти форичем по новостям и сделать им setProject($this)
A.D.🈴
Кто-нибудь пхп тут знает? :) Не симфони, но не знаю, где еще спросить. Есть json.txt - не могу его в массив загнать. И ошибок не дает и файл не парсит.
A.D.🈴
A.D.🈴
$string = file_get_contents("MPS/0a4a3916-0769-448a-86b6-af816b962b90.txt"); $json = ltrim($string, $string[0]); echo $json; $json_a = json_decode($json); echo $json_a; print_r($json_a);
A.D.🈴
название файла другое - ну это не важно, там принцип один и тот же.
Юра
А что делает ltrim
A.D.🈴
А что делает ltrim
фиксит левый символ.
A.D.🈴
короче, час гугления и я нашел спасительную строку.
A.D.🈴
$string = preg_replace('/\x{FEFF}/u', '', $content);
Юра
Странно обычно декод вроде пишет ошибку
A.D.🈴
Не пишет. Сам удивился. Типа "декодит", а если вар дамп или эхо делаьт - пустой экран.
A.D.🈴
да по фиг, разобрался, спасибо.
Andrey
Andrey
/ * @param mixed $news * @return Projects */ public function setNews($news) { if (count($news) > 0) { foreach ($news as $i) { $this->addNews($i); } } return $this; } / * @param News $news */ public function addNews(News $news) { $news->setProject($this); $this->news->add($news); }
alexandr
Приветы. Я кажется что-то упускаю в работе доктрины с монго. Подскажите пожалуйста: Есть / * @MongoDB\MappedSuperclass * @MongoDB\DiscriminatorField("type") * @MongoDB\DiscriminatorMap({ * "hotel"="App\Document\Attributes\HotelAttributes", * "apartment"="App\Document\Attributes\ApartmentAttributes", */ abstract class AbstractAttribute { / * @MongoDB\Id * @MongoDB\UniqueIndex() */ protected string $id; ... } И class Resources { /** * @MongoDB\ReferenceOne( * targetDocument=AbstractAttribute::class, * storeAs="dbRefWithDb", * orphanRemoval=true, * cascade={"all"} * ) */ protected AbstractAttribute $attributes; ... } Ресурс создаётся нормально, но при выборке по id, поле attributes не подгружается, пока не обратишься к свойству напрямую, т.е.: $resource = $this->dm->getRepository(Resources::class)->find($id); $resource->getAttributes() - возвратит, например MongoDBODMProxies\__PM__\App\Document\Attributes\HotelAttributes\Generatedff9f2b93fc44622e6cc949abb5088887 - App\Document\Attributes\HotelAttributes@proxy, а $resource->getAttributes()->getCreated() - дату создания и все поля. Вопрос - как включить загрузку всего и сразу?
Maksym
Народ, всем привет. Подскажите, как создать entity для доктрины, если название таблицы разные? В данном случае, название таблицы+мак адрес девайса
Vlad
@ORM\Table(name="olol")
slo_nik
Добрый вечер. Подскажите, пожалуйста, как можно решить проблему с route. Есть форма, которая отправляет данные методом GET другому контроллеру. Но при отправке возникает ошибка "No route found for "GET /search" (from "http://localhost:8080/")" При этом, если создать ссылку и отправить данные, то всё работает отлично. Код формы class Form extends AbstractType { public function buildForm(FormBuilderInterface $builder, array $options) { $builder ->setAction('/search') ->setMethod('get') ->setAttribute('name', '') ->add('region', Type\ChoiceType::class, [ 'label' => false, 'choices' => array_flip($this->regions->assoc()), 'attr' => ['class' => 'form-select'], 'placeholder' => 'Край/Область' ]) ->add('city', Type\ChoiceType::class, [ 'label' => false, 'choices' => [], 'attr' => ['class' => 'form-select', 'disabled' => true], 'placeholder' => 'Город' ]); } public function configureOptions(OptionsResolver $resolver) { $resolver->setDefaults([ 'data_class' => Filter::class, ]); } } В шаблоне {{ form_start(form) }} {{ form_widget(form) }} <button type="submit" class="btn btn-success banner-form-btn">Показать</button> {{ form_end(form) }} SiteController, здесь формируется форма. public function index(Request $request): Response { $filter = new Frontend\Filter(); //$form = $this->createForm(Frontend\Form::class, $filter); $form = $this->get('form.factory')->createNamed('', Frontend\Form::class, $filter); $form->handleRequest($request); return $this->render('app/site/index.html.twig', ['form' => $form->createView()]); } SearchController, сюда отправляется форма / * Class SearchController * @package App\Controller * * @Route("/search", name="search") */ class SearchController extends AbstractController { / * @param string $region * @param string $city * @param Request $request * @return Response * * @Route("/{region}/{city}", name="", methods={"GET"}) */ public function index(string $region, string $city, Request $request): Response { /......./ return $this->render('app/site/search.html.twig', ['companies' => $companies, 'form' => $form->createView()]); } } При отправке формы в адресной строке такой адрес http://localhost:8080/search?region=9d326bb2-96cd-4cd6-a3ea-508b4ade3c83&city=6e520d96-9559-4d67-9a90-a56e1defa1a1&_token=l5K7J4XGoU89zfo4gT6dGNh7VW-KXFAhvIvbVSfeyPY Необходимо получить такой адрес http://localhost:8080/search/9d326bb2-96cd-4cd6-a3ea-508b4ade3c83/6e520d96-9559-4d67-9a90-a56e1defa1a1
Юра
Составь правильный экшн у формы
Юра
Он у тебя не включает твой регион и город
slo_nik
Он у тебя не включает твой регион и город
Как я понимаю надо передать параметром данные, но как это правильно сделать в symfony?
Юра
твоя форма сабмитится на урл /search
Юра
и данные формы передаются в гет параметрах
Юра
что не так-то
Юра
ты можешь только джаваскриптом хедлить изменение региона и города и менять форме экшн
Юра
поставь форме листенер на сабмит
Юра
хотя не не уверен что после нажатия сабмит можно поменять экшн
Юра
значит на изменения селектов
Юра
для чего тебе там вообще эта форма?
Юра
если чтобы вывести селекты, тогда меня джаваскриптом экшн формы
slo_nik
для чего тебе там вообще эта форма?
Для поиска услуг в выбранном городе. Будут выводится услуги, которая оказывает фирма в выбранном городе. В идеале в адрес надо подставить не id региона и города, а slug.
Юра
вообщем джаваскрипт тебе в помощь
Юра
можно по разному сделать то что тебе нужно
slo_nik
Юра
обработать сабмит формы, получить данные формы, отменить сабмит, сделать свой запрос по нужному урлу из джаваскрипта
Юра
например
slo_nik
можно по разному сделать то что тебе нужно
хочу добиться того, чтобы в адресе были такие параметры. http://site.com/moskowskay-oblast/moskwa