Задать вопрос
  • Можно как то улучшить сигнал мобильного интернета где работают глушилки?

    svisch
    @svisch Автор вопроса
    Спасибо за совет. Я итак сменил антенну, которая шла в комплекте на направленную (горизонтальная палка с поперечными палками, уменьшающимися к концу). Не знаю такую ли вы имели ввиду антенну. А в форме тарелки будут лучше в плане направленности, чем та, что у меня сейчас?
    Написано
  • Можно как то улучшить сигнал мобильного интернета где работают глушилки?

    svisch
    @svisch Автор вопроса
    На счет наплыва отписался к ответу выше, что в населенном пункте где вышка - все норм ловит. На счет оператора - все просели по качеству. Другие еще хуже стали.
    Написано
  • Можно как то улучшить сигнал мобильного интернета где работают глушилки?

    svisch
    @svisch Автор вопроса
    Я рассматривал и это как проблему, но в населенном пункте, где стоит вышка оператора интернет летает. Да и постоянная индикация датчика скорее всего свидетельствует о помехах. Повторюсь раньше изредка промигивал и инет хороший был.
    Написано
  • Можно как то улучшить сигнал мобильного интернета где работают глушилки?

    svisch
    @svisch Автор вопроса
    Спасибо за ответ. А могли бы сказать, что есть "подороже усилитель"? Даже минимально разбираясь в этом вопросе, понимаю разброс в ценах будет большой и что для одного получше, на самом деле может быть Г. :) Может производителя(в идеале с моделью) посоветуете пусть даже навскидку, ну или порядок цен скажете, понять стоит ли оно того. Хотя из вашего ответа думается мне, что вероятность небольшая что-то улучшить!((
    Да и усилитель в антенне - это мимо антенна, которая втыкается в флешку? Если нет, то когда занимался этим вопросом не встречал таких.
    Написано
  • Что делает Cron для Yii2?

    svisch
    @svisch
    /usr/bin/php /var/www/[project_name]/data/www/yii2/yii cron


    Тут /usr/bin/php - путь к php файлу интерпретатора (или как там он правильно называется). Консольные команды вызываются через него, чаще через алиас "php"
    А /var/www/[project_name]/data/www/yii2/yii - путь к файлу в yii2, который отвечает за консольное приложение.
    Получается php интерпретатор вызывает файл yii.

    cron это должна быть одна из команд, созданная для консольного приложения бывшим разработчиком. В руководстве рекомендуют располагать по этому пути yii\console\Controller (возможно прошлый разработчик что-то мог поменять).
    Про именование каманд (в вашем случае cron) в зависимости от имени метода контроллера консольного приложения прочитайте в руководстве - там не сложно. Yii2 console

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

    P.S. В ответе могут быть неточности - давно на yii не занимался
    Написано
  • Можно ли сделать аутентификацию приложения на сессиях?

    svisch
    @svisch Автор вопроса
    shurshur, спасибо за ответ. Теперь ваш комментарий стал понятен и кое что для себя из вашей точки зрения я почерпнул))
    Написано
  • Можно ли сделать аутентификацию приложения на сессиях?

    svisch
    @svisch Автор вопроса
    shurshur, дело в том, что в моем случае на сессиях делалось мною тогда, когда еще не знал о JWT. Суть моего вопроса не выборе метода аутентификации, а как сделать именно с уже имеющейся. О плюсах и минусах той и другой я знаю (возможно не всех, но тем не менее).
    Просите, не совсем понял вашего комментария. Вы о том, что JWT - это мейнстрим и независимо, что сработали сессии, советуете сервер переделать на JWT? Так?
    Написано
  • Можно ли сделать аутентификацию приложения на сессиях?

    svisch
    @svisch Автор вопроса
    Спасибо за ответ, но вчера провел эксперимент. Почитайте пожалуйста в ответе ниже - интересно ваше мнение!
    Написано
  • Почему сбрасывается ref на элемент?

    svisch
    @svisch Автор вопроса
    WbICHA, ))) ладно, спасибо еще раз)
    Написано
  • Почему сбрасывается ref на элемент?

    svisch
    @svisch Автор вопроса
    WbICHA, свойства шаблона будут иметь каждое свое. Но когда мы этот шаблон присваиваем элементам reExport, то в каждом из них они по идее должны повторяться. Т.е. при рендере в паттерне создаются уникальные, далее копируются ссылки в новых элементах reExport. Хотя повторюсь все работает как надо
    Написано
  • Почему сбрасывается ref на элемент?

    svisch
    @svisch Автор вопроса
    WbICHA, сработало ваше предложение о функции вне компонента.
    Сделал функцию
    function createRef() {
    return {current: null}
    }

    и в паттерне reExport в свойствах пропов указывал createRef()
    За это спасибо)
    Но, если вам не сложно в двух словах поясните плиз как это работает в плане жизненного цикла Реакт и js в целом.
    В моем понятии, когда идет рендер константа паттерна в ref свойствах своих элементов вызывает createRef() и получает на каждом из них новый объект {current: null}
    Непонятно то, когда мы добавляем новую строку в reExport и делаем let newItem = reExportPattern. Мы же ссылаемся на тот же объект и по идее так же должны быть на каждом из элементов reExport одни и те же объекты! Не?)
    Написано
  • Почему сбрасывается ref на элемент?

    svisch
    @svisch Автор вопроса
    WbICHA, спасибо за советы)
    Написано
  • Почему сбрасывается ref на элемент?

    svisch
    @svisch Автор вопроса
    WbICHA,

    Ты делаешь глубокое копирование при каждом ререндере. И это не имеет смысла, пока ты создаёшь объект внутри тела компонента.
    А работает это потому, что ты таким образом создал псевдо-рефы.


    не имеет смысла, потому что память например жрет или чему то мешает? Не пойму почему это плохо! Работает же))
    Написано
  • Почему сбрасывается ref на элемент?

    svisch
    @svisch Автор вопроса
    WbICHA, спасибо большое за наводку! Я что-то и не подумал, что при создании нового reExport я передаю один и тот же объект:)
    А как вам такое решение?
    const [reExport, setReExport] = useState([structuredClone(reExportPattern)]);
    
    function addReExportRawHandler() {
            let nextReExp = [...reExport];
            let newItem = structuredClone(reExportPattern);
    
            nextReExp.push(newItem);
    
            setReExport(nextReExp);
        }


    так на первый взгляд все работает))
    И если не сложно поясните про пвсевдо-рефы. Что то не слышал о таком. Это какой то костыль? Че то не пойму как обычный объект может ссылаться на элемент.
    А на счет второго вашего предложения, попробовал для интереса создать колбэк реф упрощенно в виде
    function setRef(el) {
    reExport[item].num.ref = el
    }
    
    <input ref={setRef}>

    и так выдает ошибку el undefinded. Что-то не так делаю?)

    И да, скопируй свой ответ в отдельный ответ - помечу его как решение)
    Написано
  • Почему сбрасывается ref на элемент?

    svisch
    @svisch Автор вопроса
    WbICHA, понял. Весь компонент не могу, слишком большой. Держите то, что имеет отношение к вопросу)
    const reExportPattern = () => {
            let pattern = {
                kodfito: '',
                num: '',
                date: '',
                product: [{
                    production: {
                        id: null,
                        value: ''
                    },
                    netto: '',
                    unit: '',
                    country: {
                        id: null,
                        value: ''
                    }
                }]
            }
    
            return pattern;
        }
    
    const [reExport, setReExport] = useState([reExportPattern()]);
    
    const modelFieldRegExpPattern = {
            kodfito: {
                require: true,
                regexp: /^\d+$/,
                ref: useRef(null),
                checked: false
            },
            num: {
                require: true,
                regexp: /^[\w\/-]{4,}$/,
                ref: useRef(null),
                checked: false
            },
            date: {
                require: true,
                regexp: null,
                ref: useRef(null),
                checked: false
            },
            product: {
                production: {
                    require: true,
                    regexp: null,
                    ref: useRef(null),
                    checked: false
                },
                netto: {
                    require: true,
                    regexp: null,
                    ref: useRef(null),
                    checked: false
                },
                unit: {
                    require: true,
                    regexp: /^\d+$/,
                    ref: useRef(null),
                    checked: false
                },
                country: {
                    require: true,
                    regexp: null,
                    ref: useRef(null),
                    checked: false
                }
            }
        }
    
        const modelFieldRegExp = useRef([modelFieldRegExpPattern]);
    
    function addReExportRawHandler() {
            let nextReExp = [...reExport];
            let newItem = reExportPattern();
            nextReExp.push(newItem);
            modelFieldRegExp.current.push(modelFieldRegExpPattern);
            setReExport(nextReExp);
        }
    
    function removeReExportRawHandler(e) {
            var reIdx = e.target.parentNode.parentNode.getAttribute('reidx');
            let nextReExport = [...reExport];
    
            if (reExport.length > 1) {
                modelFieldRegExp.current.pop()
                nextReExport.splice(reIdx, 1);
                setReExport(nextReExport);
            }
        }
    
    let rowsReExp = reExport.map((item, index) => {
                let first = <tr key={index * 10} reidx={index} pidx={0} className='align-middle'>
                    <td rowSpan={reExport[index].product.length + 1}>
                        <div>
                            <Select
                                data={kodfito}
                                disabled={getKodfitoDisabled(index)}
                                name='kodfito'
                                value={reExport[index].kodfito}
                                handler={changeReExportHandler}
                                ref={modelFieldRegExp.current[index].kodfito.ref}
                            />
                        </div>
                        <div className='mt-1'>
                            <input type='text' className="form-control ms-1" name='num' value={reExport[index].num}
                                   onChange={changeReExportHandler} ref={modelFieldRegExp.current[index].num.ref}/>
                        </div>
                    </td>
                    <td rowSpan={reExport[index].product.length + 1}>
                        <input
                            type='date'
                            name='date'
                            className='form-control'
                            value={reExport[index].date}
                            onChange={changeReExportHandler}
                            ref={modelFieldRegExp.current[index].date.ref}
                        />
                    </td>
                    <td>
                        <Autocomplete data={getProductionByField(index, 0, 're')} search={getProduction}
                                      pIdx={0} outerIdx={index} name='production' section="re" value={reExport[index].product[0].production.value}
                                      choiceHandler={choiceAutocomplete} ref={modelFieldRegExp.current[index].product.production.ref}/>
                    </td>
                    <td>
                        <input type='text' className="form-control" name='netto' value={reExport[index].product[0].netto}
                               onChange={changeReExportProductHandler} ref={modelFieldRegExp.current[index].product.netto.ref}/>
                    </td>
                    <td>
                        <Select
                            data={units}
                            name='unit'
                            value={reExport[index].product[0].unit}
                            handler={changeReExportProductHandler}
                            ref={modelFieldRegExp.current[index].product.unit.ref
                        }/>
                    </td>
                    <td>
                        <Autocomplete data={getCountryByField(index, 0, 're')} search={getCountry}
                                      pIdx={0} outerIdx={index} name='country' section='re' value={reExport[index].product[0].country.value}
                                      choiceHandler={choiceAutocomplete} ref={modelFieldRegExp.current[index].product.country.ref}/>
                    </td>
                    <td style={{width: 110}} className='small-text'><span className='link hover' onClick={createFssHandler}>создать ФСС</span></td>
                    <td style={{width: 130}} className='small-text'><span className='link hover' onClick={addIntoFssHandler}>добавить в ФСС</span></td>
                    <td style={{width: 30}}><span className='link hover' onClick={removeProductRowExpHandler}>x</span></td>
                    <td rowSpan={reExport[index].product.length + 1} className='align-middle' style={{width: 30}}>
                        <span className='link hover' onClick={removeReExportRawHandler}>x</span>
                    </td>
                </tr>;
    
                let middle = getReExpProductsRows(index);
    
                let end = <tr key={index * 10 + 9} idx={index}>
                    <td colSpan='7' className='text-start position-relative'>
                        <span>Сумма: {sumProducts(reExport[index].product)}</span>
                        <span className="add-row" idx={index} onClick={addProductRowReExpHandler}>Добавить строку</span>
                    </td>
                </tr>;
    
                let delimiter = (index !== reExport.length - 1) ?
                    <tr key={index * 10 + 9.5}>
                        <td colSpan='10' className='delimiter'></td>
                    </tr> : null;
    
            return [first, middle, end, delimiter]
            }
        )
    
    return (
    <div className='card bg-light shadow-sm p-2 m-2 mt-3'>
                    <div className="row align-items-start">
                        <span className="col-sm-1 col-form-label">Описание товаров:</span>
                        <div className="col d-inline-flex">
                            <table className="table table-bordered mb-0">
                                <thead className='fs-6'>
                                <tr className='table-th'>
                                    <th style={{width: 220}}>Реэкспорт ФСС</th>
                                    <th style={{width: 150}}>Дата выдачи</th>
                                    <th>Товар</th>
                                    <th style={{width: 100}}>Нетто</th>
                                    <th style={{width: 100}}>Единицы</th>
                                    <th style={{width: 330}}>Страна происхождения (для 06 <br/>группы вводиить страну отправления)</th>
                                    <th colSpan='2'>Действия с ФСС</th>
                                    <th colSpan='2'>Удалить</th>
                                </tr>
                                </thead>
                                <tbody>
                                {rowsReExp}
    
                                <tr className='border border-0'>
                                    <td colSpan='10' className='delimiter border border-0 pt-1 pb-0'><span className='hover link' onClick={addReExportRawHandler}>Добавить реэкспортный ФСС</span></td>
                                </tr>
                                </tbody>
                            </table>
                        </div>
                    </div>
                </div>
    )
    Написано
  • Почему сбрасывается ref на элемент?

    svisch
    @svisch Автор вопроса
    WbICHA, прошу прощения - это риторический вопрос?
    Написано
  • Как правильно в Symfony десериализовать Request в DTO, а последний потом в сущность?

    svisch
    @svisch Автор вопроса
    Виктор Кожухарь, спасибо за рекомендации и объяснении. Обязательно почитаю про DDD. Кстати он у меня давно уже где-то в открытых вкладках в браузере "к прочтению", но все руки не дойдут - видимо пришло ее время)))
    Написано
  • Как правильно в Symfony десериализовать Request в DTO, а последний потом в сущность?

    svisch
    @svisch Автор вопроса
    tukreb, спасибо за участие в обсуждении. А не могли пояснить терминологию useCase в контексте моего вопроса пожалуйста?
    Написано
  • Как правильно в Symfony десериализовать Request в DTO, а последний потом в сущность?

    svisch
    @svisch Автор вопроса
    Спасибо за рекомендацию)
    А как быть в случае, если в сущности есть свойство-отношение? В DTO делать тип данных c типом данных id сущности (uuid или int, например) или же в DTO пытаться преобразовать входящие данные к типу этого отношения?
    Написано