• Как исправить ошибку Refused to display in a frame because it set 'X-Frame-Options' to 'DENY'.?

    Mr_Franke
    @Mr_Franke
    Front-end developer
    У ресурса, на который ссылается iframe, стоит заголовок X-Frame-Options: DENY. Это значит что владелец ресурса запретил вставлять его в iframe с другого домена. Так что ничего нельзя сделать
    Ответ написан
    3 комментария
  • Почему Yii/Yii2 не подходит для крупных проектов?

    @karminski
    Senior React.JS Developer
    У нас в компании 4 энтерпрайзных проекта на Yii2. В том числе CRM. В том числе и связь с телефонией, 1С, баг-трекером. Всё работает отлично, без нареканий. О каких "слабых" местах вы говорите? Прекратите читать - начните делать!
    Ответ написан
    7 комментариев
  • Как в Laravel 5.7 удобным образом разместить все файлы шаблонов в отдельной подпапке views?

    @gomer1726
    Самый примитивный метод это просто подставлять префикс
    Контроллер
    private $viewPath = 'site';
    
    //просто подставляешь
    return view($this->viewPath . 'index');

    И так у каждого контроллера свой путь, но конечно поищи еще это не самый оптимальный вариант
    UPDATED
    Идешь в config/view.php
    'paths' => [
            resource_path('views') . 'сюда свой путь',
        ],

    и обязательно после этого
    php artisan config:cache
    php artisan cache:clear
    и все
    Ответ написан
    3 комментария
  • Как в yii2 реализовать несколько последовательных форм через AJAX?

    sanchezzzhak
    @sanchezzzhak
    Ля ля ля...
    самый простой вариант это PJAX

    Делаете все также как и без ajax
    выводите форму 1
    отправили форму 1
    отобразили результата в виде формы если ошибка то показываете форму 1 итд.

    В нужном месте между формой ставите
    Pjax::begin
    форма
    Pjax::end
    Ответ написан
    Комментировать
  • Как в yii2 реализовать несколько последовательных форм через AJAX?

    @myphpscript
    Как вариант, можно создать класс (от yii\base\Model) со всеми нужными полями, на каждый шаг сделать сценарий с правилами валидации. В контроллере указываем нужный сценарий, делаем проверку, если ок сохраняем модель в сессию и выводим следующую форму. В след. шаге берем из сессии форму и делаем тоже самое. Можно без проблем вернуться к предыдущему шагу, введенные ранее данные будет загружены. На последнем делаем $model->save(), в котором сохраняем данные во все нужные таблицы. Обернуть в транзакцию лишнем не будет.
    Ответ написан
    Комментировать
  • Как лечится кризис начинающего программиста?

    kumaxim
    @kumaxim
    Web-программист
    Господин начинающий, у Вас извращенный подход к программированию в целом.
    Программа - это способ более эффективно решить какую-то задачу... способ достижения какой-то заданной цели с меньшим количеством ресурсов.

    Возьмем, как пример, тот же бух.учет на предприятии. Как Вы думаете, почему 1С Бухгалтерия так широко распространилась в РФ и СНГ? Эта программа позволяет бухгалтеру в 2-3 клика мышки сформировать отчет для регулятора(ФНС, ПФР и т.д.), вместо того чтобы человеку сидеть руками искать платежные поручения, вычислять налоги и т.п. Софт просто подтягивает выписку из банка, анализирует ее и выдает готовую для печати бумажку, что экономит бухгалтеру сильно много времени. Расчет заплатанный налогов и отчеты в соц.фонды это вообще красота - 8 кликов мышкой и все готово :-)

    Что я описал выше? Это способ решения одной конкретной задачи с гораздо меньшим количеством ресурсов, в данном случае - времени. Эта программа экономит время на подготовку бумаг, на расчеты сумм налогов, снижает вероятность ошибки и т.д. Это ее основная ценность, которую несут ее создатели обществу

    И вот, далее Вы для себя определитесь, какая Ваша основная цель? Какой Ваш основной посыл обществу?

    Личной мой посыл - "Я помогаю людям экономить: время, деньги, нервы и т.д.".

    Как я это делаю?
    У меня сначала был маленький интернет-магазин по продаже катализаторов для бензина(в поиск "кондиционеры метала для а/м"). При соблюдении определенных условий, расход топлива на малометражках снижался от 20% до 45%
    Вторым моим проектам было небольшое мобильное приложение для отслеживания хода исполнительного производства в ФССП(для взыскательней, уже сдохло). Мне и моим знакомым(не юристы) это экономило достаточно много времени на ругань с приставами, чего они должны делать и т.д. Кто сталкивался с этой службой должен знать эффективность и оперативность их работы, особенно в регионах...
    Сейчас я пишу небольшой конструктор сайтов, который поможет одной дружественной мне веб-студии сильно оптимизировать процесс создания низкобюджетных сайтов визиток

    К чему я все здесь это пишу? Я пытаюсь донести до Вас, что нет Вам смысла учить программирование на какой бы то ни было языке ради самого программирования. Нет смысла Вам учить алгоритмы, структуры, паттерны и т.д. ради их самих.

    Когда Вы пишите программу Вы должны понимать с какой целью Вы ее пишите. Сможет ли ее написание приблизить Вас хотя бы на пару сотых процента к осуществлению Вашей цели, будет ли это укладываться в Ваш посыл обществу. Осознайте это чисто для себя, не нужно это где-то писать.

    Если говорить о чисто практических инструментах(функции стандартной библиотеки, фреймворки и т.д.)... Лично я могу считать себя профессионалом в какой бы то ни было технологии, ни когда я прочитал 1-2 книги и/или написал 1,5 задачи оттуда же. С таким уровнем я не могу сказать что я знаю язык/технологию в принципе, просто знаком - да, но я ее не знаю. Считать себя профессионалом я могу после того как решу не менее сотни задач, используя эту технологию и написал не менее 1 млн строк кода, именно написал, а не сгенерировал rake/gii/artisan или чем-то там еще.

    Вам же я желаю не останавливаться, развивайтесь. Мастерство приходит с опытом.

    P.S.: от холиваров на тему 1С прошу всех воздержаться
    Ответ написан
    11 комментариев
  • Как правильно сделать запрос в Yii2?

    kawabanga
    @kawabanga
    Model::find()
    ->andWhere(['id'=>[1,2,3]]) // массив автоматически превращается в запрос in ()
    ->limit(3) // limit записей. 
    ->all();
    Ответ написан
    1 комментарий
  • Class "view" does not exist - Laravel почему?

    Denormalization
    @Denormalization
    composer dumpautoload -o
    Делал? Должно помочь.

    99% проблем с reflection у Laravel, решается командой выше.
    Ответ написан
    6 комментариев
  • Yii2 GridView + sqldataprovider как сделать таблицу?

    @Mr_Romanov Автор вопроса
    FullStack WebDev
    Всем спасибо! Получилось таки :)

    use yii\data\SqlDataProvider;

    $count = Yii::$app->db->createCommand('SELECT COUNT(*) FROM clients')->queryScalar();

    $provider = new SqlDataProvider([
    'sql' => 'SELECT * FROM clients',
    'totalCount' => $count,
    'pagination' => [
    'pageSize' => 10,
    ],
    'sort' => [
    'attributes' => [
    'id',
    'name',
    'phone',
    ],
    ],
    ]);
    $models = $provider->getModels();

    echo GridView::widget([
    'dataProvider'=> $provider,
    'responsive'=>true,
    'hover'=>true
    ]);
    Ответ написан
    Комментировать
  • Можете ли оценить код, и сказать как сделать его лучше?

    @EvgeniiR
    https://github.com/EvgeniiR
    1. Type hints для свойств через phpdoc использовать. Или обновиться до 7.4 и использовать type-hints средствами языка.
    2. Type hints для аргументов методов и возвращаемых значений использовать.
    3. Написать класс Logger и использовать как зависимость. Желательно чтобы он был адаптером для LoggerInterface(psr3)
    4. Методы и переменные нормально называть, половину пхп-доков повыпиливать.
    5. Логику(ветвления) либо выносить в зависимости, либо писать юнит-тесты на неё. Учитывая что этот класс ещё и в базу лазит через AR, логики(ветвлений) тут лучше не делать.
    6. $value передавать не в конструктор а в конкретные методы где оно нужно, чтобы не пересоздавать экземпляр класса для каждого списания.
    7.
    private function initiator($system = true){
        if ($system){
            return User::find()->where(['login'=>'System'])->one();
        }
        return Yii::$app->user->identity;
    }


    Выкинуть из этого класса, для работы ему это не нужно, а для логгера хватит и идентификтора, дальше логгер сам пусть разбирается что откуда достать и залогировать.

    5. это вы имеете ввиду что в методах new используется?

    Да, внедряйте зависимости через Dependency Injection. То есть не создавайте new CashLog а требуйте экземпляр логгера с нужными вам методами в конструктор. Если логгеру нужен юзер а у вас в классе только его идентификатор - желательно бы передавать в логгер идентификатор, а дальше пусть его забота будет, чтобы не нагружать этой логикой ваш класс.
    В принципе о связности/тестируемости вам рановато пока думать, в будущем стоит присмотреться к принципам Coupling/Cohesion.
    Ответ написан
    Комментировать
  • Плоха ли описанная архитектура, для laravel?

    @gian_tiaga
    На словах модульная архитектура звучит хорошо, но по факту со временем всё сливается в сильно зависимые модули друг от друга, и сложная поддержка. Монолит проще поддерживать. На нескольких проектах пришлось переписывать из за сложности поддержки из модульной в мнолоит.
    Ответ написан
    4 комментария
  • Зачем нужен Gulp?

    @artinnok
    бекенд-программист
    CSS и JS:
    К примеру, у вас имеется большое количество (Х штук) css или js файлов, которое вы подключаете на своих страницах посредством тэгов <link> и <src>.
    При загрузке страницы, браузер клиента будет отправлять X запросов к вашему серверу, а ваш сервер должен будет ответить на X запросов.
    Это:
    1. Тормозит загрузку страницы - будете ждать ответа от сервера
    2. Загружает ваш сервер

    С помощью сборщиков фронтэнда вы можете "склеить" все файлы в один - main.css и main.js, которые будут отдаваться 2 запросами с сервера. Также, вы сможете минифицировать CSS и JS. Под минификацией подразумевается уменьшение размеров файла на диске. Естественно, более легкий файлы будет быстрее прогружаться + минимальное количество запросов к серверу.

    IMG:
    К примеру, у вас имеется Х изображений размером 700 Кбайт. Клиенту надо будет загрузить 700 * X Кбайт. Если вы пропустите свои изображения через Gulp, то вы получите изображения с меньшим размером на диске и такого же качества, т.е. клиенту придется прогрузить примерно (500-600) * X Кбайт.
    Ответ написан
    1 комментарий
  • Архитектура приложения. Как сделать независимые модули (сервисы)?

    myks92
    @myks92 Куратор тега Yii
    Нашёл решение — пометь вопрос ответом!
    По этому вопросу очень долго искал ответа))
    Вам уже скинули статью по независимым модулям, но этого мало. Что вам нужно:

    1. Независимый слой MODEL.
    В этой папке находятся Use Case (Service), Сама сущность Entity (AR), Желательно иметь репозитории для изоляции от базы данных ну и другой доменный слой логики, который не зависит ни от чего. Ни от фреймворка, ни от других модулей и пакетов. Ваша задача написать код в этой части так, чтобы его можно было скопировать в любую папку, настроить зависимости и чтобы этот код заработал хоть на чистом PHP. Если не планируете менять фреймворк, то можно зависить от фреймворка.

    2. Зависимости
    Все зависимости модуля реализовать либо через Interface либо через события, но события лучше. А дальше уже синхронизируйте через приложение или отдельный модуль. Можно и по api.

    3. UI (пользовательский интерфейс)
    Он может быть зависимым от других модулей. В него входят: контроллеры, view, формы, vue.js и так далее. В общем то, с чем взаимодействует пользователь.

    Тем самым получается такая система если опираться на MVC:
    VC - могут быть зависимы от других модулей
    M - не может быть зависима ни от чего, кроме PHP. Желательно и отделять слой базы данных с помощью Repository. Тогда ваш пакет будет очень сильно независим даже от базы. И вам вообще будет без разницы куда вы это храните в user или employee.

    Если будет такой слой, то можно спокойно переносить хоть на будущий Yii3. Однако На Yii1 и Yii2 такое сделать сложно. Надо изворачиваться и займет это больше времени. Так как сам Фреймворк вставляет нам палки и приходится делать костыли из-за его монолитности. К такому подходу не привыкли Yii1 и Yii2 разработчики. Обычно на Yii такое понимание «фигак, фигак и в продакшн».

    Такую архитектуру удобно будет строить на Symfony ну и будущем Yii3.

    Рекомендую к прочтению:
    Ответ написан
    7 комментариев
  • Как реализовать данный фильтр и как организовать код?

    Sanasol
    @Sanasol Куратор тега JavaScript
    нельзя просто так взять и загуглить ошибку
    по нескольким полям (более 50),

    И они явно все неуникальные.
    Всего может типов 5 наберется(select/multiselect/string/number/range/datepicker) -> выносите каждый тип в компонент -> код уменьшается в несколько раз.

    Чтобы нормально работать с данными берете vuex.
    Из вашего большого кода убирается большая часть работы с состоянием, а не через миллион пропсов/data свойств.
    Все фильтры соответсвенно тоже работают с vuex, а не через миллион пропсов/data свойств.

    Чтобы фильтровать/сортировать данные возможно более лаконично будет выглядеть lodash какой-нибудь, хотя можно и нативно почти таким же количество кода всё это делать.

    Этого достаточно чтобы уменьшить ваш код в несколько или больше раз.
    Ответ написан
    Комментировать
  • Как пользоваться gRPC?

    Vamp
    @Vamp
    1. Надо смотреть какое именно API предоставляет сервер. Если JSON REST, то gRPC не подойдёт. gRPC - отдельный протокол, который должны поддерживать и клиент, и сервер, чтобы можно было по нему взаимодействовать.

    2. Если хотите взаимодействовать с удалённым сервером, то нужен только клиент. Если хотите сами быть для кого-то сервером, предоставляющим gRPC API, то нужен сервер. На PHP нельзя сделать gRPC сервер, видимо поэтому и предлагают node.js. Попробуйте поднять сервер на линуксе, вместо openserver. Тогда появятся команды, описанные в доке, и вообще разработка станет гораздо проще.

    3. Простых доков по gRPC не видел.

    Помимо самого gRPC вам придётся разобраться ещё и с protobuf, так как gRPC основан на нём. Его тоже необходимо установить либо как модуль к PHP, либо как composer зависимость. Помимо этого, удалённый сервер должен предоставить proto файл, на основе которого вы будете делать gRPC клиента. Этот файл необходимо скомпилировать при помощи protoc (компилятора protobuf) с использованием специального плагина к нему - grpc_php_plugin. В результате получится набор PHP скриптов, реализующих gRPC клиента для доступа к API удалённого сервера. Вот эти скрипты вы и будете использовать в своих скриптах для общения с сервером.
    Ответ написан
    3 комментария
  • Как использовать анонимные функции в php?

    Decadal
    @Decadal
    "если анонимные функции в yii2 указывают в конфигах, значит их кто-то вызывает"

    Создаете свой Grid - тогда создавайте и обработчик, который будет вызывать ключ tableName, предполагая, что он может быть Callable.

    но мой вам совет - просто оставьте это строкой и делайте tableName => UserRecord::tableName()
    Ответ написан
    4 комментария
  • Добрый день, нигде не могу найти логику отображения комментариев на сайте, имеется ли такая или придется велосипед изобретать?

    Vovanys
    @Vovanys
    В последней статье на хабре рекомендовали commento.io
    Исходники тут https://gitlab.com/commento/commento
    Не php конечно но может что-то яснее станет
    Ответ написан
    Комментировать
  • Можете ли вы привести пример описания функциональности приложения?

    MetaAbstract
    @MetaAbstract
    Архитектор информационных систем и баз данных. Ful
    Это называется проект системы. Он может быть разного уровня детализации и состава в зависимости от ситуации. Вы написали про ТЗ, по идее там все должно быть, но видимо по факту у вас бизнес требования. В минимуме модель данных и модель интерфейса надо сделать, а так гуглите методы проектирования и разработки программного обеспечения. Если пилите микросервисы это одно, если монолит - другое, но сейчас такая технологическая ситуация, что приходиться начинать со схемы используемых компонент в системе, т к под каждую задачу есть уже готовый элемент.
    Ответ написан
    1 комментарий
  • Yii2 Виджеты и база данных?

    webinar
    @webinar Куратор тега Yii
    Учим yii: https://youtu.be/-WRMlGHLgRg
    Тут наверное любой ответ будет спорным, но я думаю лучше поступать так:
    в конфиге (или в базовом контролере) цепляемся за событие beforeAction:
    'on beforeAction' => function($event){
          Yii::$app->params['menuData'] = ArrayHelper::map(Imagemenumain::find()->all(),'id','title');
          //ArrayHelper тут для примера, хотел обозначить, что не стоит засовывать в params более чем нужно виджету. Там должен оказаться подготовленный массив с нужными данными
        },

    в views/layout/main.php юзаем виджет
    echo SomeMyWidget::widget([
      'someWidgetParam' => Yii::$app->params['menuData'],
      'someWidgetParam2' => 'маракуя',
      'otmetitOtvetom' => true
    ]);

    Виджет не должен знать о базе данных. Завтра сменится структура базы, а виджет продолжит работать. Так как он получает определенный массив данных. И при смене структуры БД вы просто смените метод формирования нужного массива, что бы передать в виджет. По той же причине его можно будет переиспользовать в других проектах.
    ПыСы: Формирование массива вместе с запросом в базу наверное имеет смысл закешировать.
    Ответ написан
    Комментировать