• Как связанны backend+RESTful API+Базы данных?

    Wolfnsex
    @Wolfnsex
    Если не хочешь быть первым - не вставай в очередь!
    Как связанны backend+RESTful API+Базы данных?

    Самый просто пример - это браузер, в роли клиента. И [*любой_язык*] в роли REST-сервера. Сервер при этом, может взаимодействовать с базой данных, для генерации ответов на запросы клиента.

    Но приложения на андроид пишутся на Java.
    Не только на Java... Но, это не имеет значения как такового, на чем они пишутся на клиенте.

    Получается, что если за основу сайта я взял Django, то и на мобильном приложении будет основа Django
    На мобильном приложении, с вероятностью 99% будет клиент. На чем он будет написан - значения не имеет особого, но Django в андроиде - очень вряд ли.

    Какую роль играет при этом сервер?
    Роль сервера, судя по всему.

    И да, последний вопрос: какие темы/аспекты нужно выучить, чтоб разбираться в этом?
    Конкретно про REST - я привёл Вам ссылку выше. Так же рекомендую ознакомиться со спецификацией на HTTP-протокол, полезно и в качестве примера для Вашего вопроса и вообще в целом.
    Ответ написан
    Комментировать
  • Шаблонизаторы ещё актуальны?

    Wolfnsex
    @Wolfnsex Куратор тега PHP
    Если не хочешь быть первым - не вставай в очередь!
    Шаблонизаторы типа Smarty, Twig в 2017 востребованы, если с ними раньше не работал стоит ли смотреть, изучать что бы повысить ценность свою на рынке труда?

    Smarty - вряд ли.
    Twig - вполне себе актуален, я Вам даже больше скажу, он уже интегрирован "из коробки" в довольно популярную CMS по имени Drupal 8 (т.к. он сделан на базе Symfony) и собственно, в не менее популярный фреймворк под названием Symfony. И, Twig отлично встраивается в очень популярный фреймворк (я имею в виду, в ракурсе PHP-*) под названием Laravel, который в свою очередь так же имеет свой весьма неплохой шаблонизатор, под названием Blade.

    Среди прочего, вариация Twig'а есть даже для JS (Node.JS), в качестве альтернативы таким штукам как Pug/Jade например. *По информации одного из наших коллег, такие шаблоны (в JS-вариации интерпретатора) отлично переносятся потом в оригинальный Twig/PHP (имеют хорошую совместимость/переносимость).
    *Сам не проверял, но, доверяю словам автора.

    Или их нативный php всё же их вытеснил
    Из тех шаблонизаторов, что я могу вспомнить, по моему, все "компилируются" (преобразуются) в нативный для системы код (даже Smarty), т.е. если мы говорим про PHP - то соотв. в PHP-код. Парсится шаблон в код не часто и разница в производительности довольно не значительная, в 99% случаев - ей можно принебречь.

    или все ушли во Фронтенд шаблонизаторы?

    У них обычно немного разные категории задач. Если Вы говорите про шаблонизаторы аля Pug/Jade - то, что из них выходит, в конечный не-JS код, интегрируется плохо. То есть, смысл от этого шаблонизатора только для того, кто делает вёрстку, практической пользы при переносе на PHP-движок (и другие не JS-движки) от него обычно нет, либо очень мало.

    Если говорить о чисто клиентских реализациях - генерировать данные на клиенте, в таком объёме, по моему, не кошерно в подавляющем большинстве случаев, с учётом того, что сервер может кэшировать страницу целиком и выдавать сразу готовую (Varnish, например, это если говорить о необходимости высокой производительности), а какой-нибудь полу-мёртвый смартфон, бедолаги, который зайдет на подобный сайт - лопнет от чрезмерного изобилия JS-кода.
    Ответ написан
    Комментировать
  • Курсы\стажировка для java программиста?

    @evgeniy_lm
    Начнем с того, что любые курсы это не более чем один из множества способов "честного отъема денег у населения". В реале курсы не дают ни каких знаний и работодатели это прекрасно понимают. Начни с того, что приложи свои знания к тому чем ты занимаешься, если это возможно. Если ты работаешь не в конторе, а на стройке или сантехником сделать это будет проблематично, но тоже можно, поговори со своим мастером может ему чего надо запрограммировать по работе. Иначе ищи подработку на фрилас сервисах.
    Если ты не работаешь походи по конторам предложи свои услуги, можно даже бесплатно, но при этом не подписывай ни каких контрактов и соглашений тогда за тобой сохраняется юридическое право на все что ты сделешь
    Ответ написан
  • Как лучше реализовывать actions в контроллерах фреймворков или widgets?

    rpsv
    @rpsv
    делай либо хорошо, либо никак
    Виджеты - просто выводят данные, которые им кинул контроллер. По своей сути виджеты - это представления (MVC). То есть в действии (action) контроллере, вы только подготавливаете данные (model) для представления.

    Если говорить конкретно про вашу задачу и немного ООП: вам нужно реализовать 2 базовых виджета:
    - список новостей - принимает на вход DataProvider с новостями
    - список комментариев - принимает на вход DataProvider с комментариями

    А затем наследоваться от виджета "список новостей" и сделать еще парочку:
    - список топовых новостей
    - список архивных новостей

    Код будет выглядеть примерно так (абстрактно):
    /*
    список новостей
    */
    class ListNews extends ListView {}
    
    /*
    список топовых новостей
    */
    class ListTopNews extends ListNews
    {
        public function init()
        {
            // создаете провайдер с топовыми новостями
            $this->dataProvider = new ActiveDataProvider(...);
            parent::init();
        }
    }


    Ну и так далее по аналогии. Таким образов ваши новости (любые) буду одинаково выглядеть (ну с учетом одинакового представления), и вы сможете легко плодить нужные вам типы списков новостей.

    Вам просто нужно понять, что представления (view) могут (а точнее должны), напрямую брать данные из модели (model). Если говорить про Yii, контроллер в данном случае просто передает данные в представление (что на самом деле слегка нарушает MVC).
    Ответ написан
    Комментировать
  • В чем разница императивного и декларативного подхода в javascript? Это процедурный и ООП стили?

    @pikkvile
    developer
    Моё понимание такое.
    Декларативное программирование - это когда в коде описано что должно получиться, а императивное - когда написано как это сделать. Т.е. в первом случае мы совершенно не интересуемся, каким именно образом машина сделает работу, какие инструкции в каком порядке выполнятся и так далее, мы просто объясняем ей, что хотим увидеть в результате. Примеры декларативных языков - html, css, sql, конфиг nginx. Ещё тут стоит упомянуть функциональные языки (lisp, haskell), программы на них тоже, как правило, являются описанием (декларацией) того "что должно получиться". Ну, короче говоря, мы говорим компьютеру: вот смотри, мне надо чтобы было так, а как ты это сделаешь, мне не интересно. Аналогия такая: у меня есть чертёж бани, я даю его бригаде строителей и уезжаю. Как именно они там будут таскать брёвна, пилить доски и прочее - я не в курсе.
    Программируя императивно, мы описываем конкретные шаги, действия и точный порядок, в котором их нужно исполнять. Напрямую руководим процессом, непосредственно отдаём приказания. Примеров масса, большинство популярных языков императивны, в том числе и javascript. Ты пишешь: вот, сделай-ка переменную myVar, потом запиши туда число 5, повторяй это до тех пор, пока что-то не случится... и так далее. Возвращаясь к примеру с баней, ты теперь - начальник бригады, именно говоришь какое бревно куда класть.
    Что касается процедурного и объектно ориентированного стилей, это немного о другом. Я бы сказал, что это два разных способа писать императивные программы. В процедурном случае мы организуем код, наши команды (приказы машине) в виде процедур. Процедура - набор команд. Это довольно простой способ организации кода и исторически более ранний. ООП - это чуть более сложный подход к организации кода, когда мы группируем инструкции и данные, которыми они манипулируют, вместе. Объект - это состояние (данные) плюс поведение (набор методов). Но это уже немного другая история.
    Ответ написан
    2 комментария
  • Передача данных из контроллера в шаблон (layout). Как грамотно реализовать в yii2?

    @melnikov_m
    Можно обернуть эту кастомную логику в виджет и тогда в шаблоне он будет подключаться одной строкой.
    Ответ написан
    Комментировать
  • Как оформить произвольный класс в Yii2?

    Decadal
    @Decadal
    MVC - архитектура, которая строится при помощи связки модель-вьюха-контроллер. Но это не значит, что любой класс, который вы захотите создать, должен быть либо вьюхой, либо контроллером, либо моделью. Нет, смотрите по назначению вашего класса - в Yii2 существуют хелперы, которые просто созданы в папке helpers (можете создать свою - frontend/helpers, почему бы и нет?). И вызываются примерно так: ArrayHelper::getValue($array, 'foo.bar.name');
    Возможно, ваш класс лучше оформить как сервис - тогда почитайте про сервис-локатор. Читайте документацию, смотрите, как работает сам Yii2 и черпайте решения из него же.
    Где именно создавать классы? Решайте сами. Если работаете с advanced-шаблоном, можете создать в common папку components и запилить там свои классы. Не забудьте для них указать namespace common\components; и тогда вы сможете подключать их так:
    use common\components\MyClassName;
    //...
    $api = new MyClassName($someConfig);
    Ответ написан
    3 комментария
  • Как написать ссылку?

    webinar
    @webinar Куратор тега Yii
    Учим yii: https://youtu.be/-WRMlGHLgRg
    frontend и backend отдельные app. И url manager одного app не подозревает о существовании второго. Поэтому нужно в конфиге frontend делать еще один urlManager, который будет знать о backend. И использовать его при формировании ссылки.
    Например:
    //это стандарный 
            'urlManager' => [
                'class' => 'yii\web\urlManager',
                'enablePrettyUrl' => true,
                'showScriptName' => false,
                'rules' => [],
            ],
    //это второй 
            'urlManagerBack' => [
                'class' => 'yii\web\urlManager',
                'baseUrl' => 'http://mybackenddomain.com',
                'enablePrettyUrl' => true,
                'showScriptName' => false,
                'rules' => require(__DIR__ . '/../../backend/config/routes.php'), //тут путь к файлу с rules для backend
            ],

    А ссылку формировать так:
    Yii::$app->urlManagerBack->createAbsoluteUrl('/'); //ссылка на главную
    Yii::$app->urlManagerBack->createUrl(['site/about']); //Ваш пример
    Ответ написан
  • Как получать геокодирование на одном языке?

    webinar
    @webinar Куратор тега Yii
    Учим yii: https://youtu.be/-WRMlGHLgRg
    использовать (получать) только координаты, цифры не зависят от языка, а потом использовать их для получения названий через тот же google maps api:
    https://developers.google.com/places/javascript/

    или разобрать js и добавить в него локализацию:
    https://developers.google.com/maps/documentation/j...
    Ответ написан
    Комментировать
  • Как скрыть поля от определеных пользователей GridView?

    qonand
    @qonand
    Software Engineer
    Если я правильно понял задачу, то у Вас есть таблица в которой есть название поля (key_feild) и его значение (value), Вам соответственно для пользователей у которых нет разрешения canViewsSite нужно скрыть данные с key_field = 'site'

    Тогда непонятно зачем это делать на уровне GridView если можно просто выбрать данные по соответствующим условиям из БД. Например так:
    MyModel::find()->where(['not' in, 'key_field', 'site']);
    Ответ написан
    3 комментария
  • Связи баз данный в Yii2?

    webinar
    @webinar Куратор тега Yii
    Учим yii: https://youtu.be/-WRMlGHLgRg
    Связи в yii2 и в базе живут отдельной жизнью. Так что - ДА, можно в базе не указывать. На работу связей в yii это не повлияет.
    Однако стоит помнить, что связи в yii и в базе работают по разному - не удаляют связанные данные и т.д. Это просто связь для получения связанных данных.
    Ответ написан
    Комментировать
  • Как для админа выводить свои блоки?

    slo_nik
    @slo_nik Куратор тега Yii
    Добрый день.
    Никак не реализовать.
    Сделайте отдельно контроллеры и представления для пользователей и администраторов.
    Доступ закройте на уровне контроллеров.
    Подробней здесь.
    Ответ написан
    3 комментария
  • Как передать значение из шаблона в модель через форму?

    clojurerabbit
    @clojurerabbit
    Это, конечно, не совсем то, чего вы спрашиваете, но я бы не стал сохранять имя в hidden, а просто сделал вот так:
    ...
    if form.is_valid():
        comment = form.save(commit=False)
        comment.user = request.user
        comment.save()
    ...
    Ответ написан
    1 комментарий
  • Есть ли готовые решения на Yii2 авторизация под пользователем?

    @Quieteroks
    php программист
    По хорошему необходимо разделить на два приложения. В Yii2 даже advanced шаблон под данную архитектуру настроен. Тогда у вас вопроса с auth_key не возникнет, при переходе в разные приложения.

    Сделать авторизацию за пользователя легко, просто передать модель User в функцию Yii::$app->user->login($user, 0); Модель Вы можете получить по id в админке. Вопрос только в том, что бы авторизоваться в пользовательском разделе, а не в админке.

    Расширения? Я искренне надеюсь, что такое никто не делает. Поскольку это огромная дыра в безопасности Вашего сайта. Все, что Вам нужно, вы должны вынести в админку, а не авторизовать админа под пользователем. Особенно если у Вас имеются приватные данные или имеете отношение с денежными средствами.
    Ответ написан
    7 комментариев
  • Есть ли в Yii аналог файла init.php в 1С Битрикс?

    ap0stal
    @ap0stal
    Web-разработчик
    Вы можете это сделать например так:
    1. Создать каталог helpers и внутри пространства создать класс-помощник, например: \common\helpers\Paser.php
    2. Перенести пользовательские функции как статичные методы класса Parser.php и использовать их в любых частях проекта подключив Ваш класс-помощник в секции use

    use \common\helpers\Paser;

    Если у вас возникли подобные вопросы, то рекомендую уделить больше времени изучению официальной документации.
    Ответ написан
    1 комментарий
  • Почему не обновляются ресурсы?

    slo_nik
    @slo_nik Куратор тега Yii
    Доборое утро.
    Можно вместо
    public $publishOptions = ['forceCopy' => true];
    добавить в конфигурационный файл
    'assetManager' => [
               'linkAssets' => true,
            ],

    При этой настройке будут сразу обновляться файлы ресурсов, а так же они не будут дублироваться в web/assets, вместо этого будут создаваться символические ссылки на файлы.
    Ответ написан
    Комментировать
  • Есть ли в интернете ПОЛНЫЕ курсы Java бесплатно?

    lxsmkv
    @lxsmkv
    Test automation engineer
    1) Курс по Java 8 (версия 101). Подготовка к сертификации Oracle Java.
    https://www.youtube.com/playlist?list=PLUSohJYRsRB...

    2) Разработка на Java (весна 2016) курс Mail.ru Group
    https://www.youtube.com/playlist?list=PLrCZzMib1e9...

    3) Курсы Java (Иван Головач) Версия #1 (Core+Patterns+Junior)
    https://www.youtube.com/playlist?list=PLwcDaxeEINa...

    4) Java для начинающих
    https://www.youtube.com/playlist?list=PLmqFxxywkat...

    Лично мне больше всего нравится 3. Иван Головач - очень "прошареный" лектор.
    Ответ написан
    Комментировать
  • Как добавить новый пункт меню для гостя?

    @Quieteroks
    php программист
    Не использовать тернарный оператор?
    if (Yii::$app->user->isGuest) {
        $menu[] = ['label' => 'Вход' ,  'url' => ['/site/login']];
        $menu[] = ['label' => 'Регистрация' ,  'url' => ['/site/signup']];
        ...
    }
    Ответ написан
    Комментировать
  • Как в элемент формы Yii2 добавить свой тег?

    qonand
    @qonand
    Software Engineer
    Если я правильно понял, Вам необходимо настроить шаблон отображения чекбоксов внутри checkboxList. К сожалению в yii не предусмотрена возможность настройки одного шаблона для всех чекбосов в checkboxList, но вид каждого чекбокса можно генерировать самостоятельно. Собственно для решения Вашей задачи этим можно и воспользоваться, например так:
    $inp->checkboxList($inputParams['label_values'], [
        'encode' => false,
        'item' => function ($index, $label, $name, $checked, $value){            
            $id = "ch{$index}";
            return Html::beginTag('div',['class' =>'checkbox']) . Html::label($label,$id) . Html::checkbox($name,$checked,['id'=>$id]) . Html::endTag('div');             
        } 
    ]);
    Ответ написан
    Комментировать
  • Как учиться новому после рабочего дня?

    EvilsInterrupt
    @EvilsInterrupt
    System programming, Reversing Engineering, C++
    1. 9 часов. Это уже ошибка. КЗОТ писали не дурни. 8 часов достаточно для работы, если человек не чаи пьет
    2. Пересмотрите процесс работы. По приходу на работу сначала делать самые важные. Прошу прочесть внимательно: сначала важные, а только потом срочные и другие. Отличие важных от срочных в том, что одни, как правило, делаются разово и про них забываются, а другие хоть и не срочные, но они влияют стратегически.
    3. Уделяйте время на то, чтобы подумать над "светлым будущим", т.е. создать\актуализировать список страгеческих целей и задач
    4. Делайте утром зарядку. Растяжку, отжимания, приседания. Это влияет на энергетику в организме
    5. Делайте перерывы во время работы.
    6. Чаще пейте воду
    7. Займитесь спортом. На своей шкуре опробовал и четко знаю то, что до занятия плаванием делал меньше, чем сейчас
    8. Окружите себя теми, кто куда-то стремится. Это не значит что надо всех других послать в Южную Америку на оз. Нахой. Это значит, что надо чаще общаться с одним типом людей и меньше с другим
    9. Стремитесь работать на результат, а не подсчет "жопочасов". В дальнейшем ставьте работодателю на собеседовании вопрос "Вам нужны жопо-часы или результаты?". Старайтесь выявить жмотов. Если вы вдруг справились не за 5, а за 4 часа, а работодатель жмотится и боится выделить время на самообучение сотрудника, хотя эти же знания будут применены при решении рабочих задач, то уходите от такого работодателя!

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

    После работы лучше тупить. Мозг должен "отдыхать". То есть заниматься структуризацией, обработкой того, что произошло за день.

    Старайтесь избегать рывко-образной работы. Все должно быть стабильно. Пусть даже небольшими кусками работы, но стабильно и бессбойно!
    Ответ написан
    6 комментариев