Quantcast
Channel: Библиотека знаний
Viewing all 1318 articles
Browse latest View live

Расширения / Extension - [Plugins]

$
0
0

Расширения / Extension

Поиск расширений

Создание

Обязательным требование для расширения является наличие типа
"type": "yii2-extension" Пример

Admin

Dashboard

DB

Active Record

User

RBAC

Rest

  • yii2-rest

Excel

Shops

Shop

Посмотреть

Cart / Order

Log

Localization

Backup

Blog

Markdown

Editor

Fonts

Console

Cache

APP / Template

API

APNS / GSM

OAuth/OpenID

User/Auntification

Image

File

Fields / Form

Select

Assets

Sort

Rules/Validator

Relation

Behavior

Scroll page

Notifications

GEO

  • willdurand/geocoder

WebSocket

Chat

Легенда

  • yiisoft/yii2-authclient - так обозначаются пакеты composer

Loaders

SMS

Switch

Sliders

Удаленные хранилища

Social

Events

Queuing

Plugins

Generator / Gii


Yii2 шаблоны / темы - [Менеджеры]

$
0
0

Yii2 шаблоны / темы

Менеджеры

    • AdminLte - yii2-theme-adminlte
    • Agency - yii2-theme-agency
    • DataServ - yii2-theme-dataserv
    • Flat - yii2-theme-flat
    • Hyde - yii2-theme-hyde
    • Obaju - yii2-theme-obaju
    • Yii2 original - yii2-theme-original
    • Sailor - yii2-theme-sailor
    • Twenty Fifteen - yii2-theme-twentyfifteen
    • Gentelella - yii2-gentelella

Themes / Темы

Semantic-UI

Статьи / Ссылки

Коллекции Yii2 Extensions (лучших расширений) на github - [Остальные]

$
0
0

Коллекции Yii2 Extensions (лучших расширений) на github

Коллекции большого спектра расширений для фреймворка yii2, начиная от, виджетов и заканчивая полноценными системами CRM

Демонстранция

Репозитории

Мой репозиторий

Поиск

Остальные

Vue.Js Framework - [RU]

$
0
0

Vue.Js Framework

В отличие от фреймворков-монолитов, Vue создан пригодным для постепенного внедрения. Его ядро в первую очередь решает задачи уровня представления (view), что упрощает интеграцию с другими библиотеками и существующими проектами. С другой стороны, Vue полностью подходит и для создания сложных одностраничных приложений (SPA, Single-Page Applications)

Документация

Объект VueJs

Vue.use({
    install:function(Vue, options){ 
        Vue.mixin({ 
        }); 
},{
    createComputed:true}); 
var app =new Vue({// Используется в раннем связывании
    el:'#app',
    name:'nameApp',//
    props:[],//
    data(){},//
    methods:{},//
    computed:{},//
    watch:{},//
    components:{},// Событие перед созданием компонента
    beforeCreate(){},// Событие после создания компонента
    created(){},// 
    beforeMount(){},});

Глобальная конфигурация

Vue.config - это объект, содержащий глобальные конфигурации Vue. Вы можете изменить свои свойства, перечисленные ниже, перед загрузкой приложения:

  • Vue.config.silent = true
  • Vue.config.devtools = true
  • Vue.config.errorHandler = function (err, vm, info) { ... }
  • Vue.config.warnHandler = function (msg, vm, trace) { ... }
  • Vue.config.ignoredElements = [
    /^ion-/,
    'another-web-component' ]
  • Vue.config.keyCodes = {}

Конструкции html (атрибуты)

  • v-bind, : - Связывает HTMLатрибут с переменными или методом (:href, :src), также можно применять java-script выражения
  • v-on, @ - Методы (click, change, blur, etc) или в нативной декларации (onClick, onChange, onBlur)
  • v-model - Связывает входной параметр value и событие input (двусторонняя привязка)
  • v-for - Конструкциия for для массива или для массива возвращенного методом
    <div :v-for="method in methods"></div>
  • v-if - Конструкция if значение переменной или переменая возращаемоя методом (скрывает или показывает тэг)
  • v-html - Вывод HTML
  • v-show -
  • :is - наименование компонента, если по какой-либо причине нельзя испозовать тег в качестве названия компонента
    <div :is="com1"><div><!-- или --><com-1></com-1>

Свойства объекта

  • data: {}
  • methods: {}
  • computed: {} - Отслеживает переменные внутри методов декларированных в computed (возвращает значение)
  • props: [] - Аналогично объявлению входящих в функцию параметрах
  • wath: {} - Отслеживает изменение именованных как метод переменных
  • template: "" -
  • model: {}
  • components: {} - Список копонентов
  • filters: {} - Применяются для обработке в выводе {{ | filterName}}
  • directives: {} - Методы представляют из себя директивы v-todo-focus, имена методов указываются без v-
    • Пример
      <inputclass="edit"type="text" v-model="todo.title" v-todo-focus="todo == editedTodo" @blur="doneEdit(todo)" @keyup.enter="doneEdit(todo)" @keyup.esc="cancelEdit(todo)">
  • mountend: {} -

Методы объекта

  • this.$emit() - Вызов метода дочернего компанента
  • this.$el - виртуальный дом
  • this.$mount(selector) - При этом необходимо из app удалить указание елемента el
  • this.$refs - Ссылки на реальный дом елементы
    • <element-name ref="">
  • this.$resource - Сторонний модуль vue-resource (не входит в vuejs)
  • this.$slots - Позмоляет передавать HTML, в качестве строки (В шаблоне необходимо использовать тэг <slot>, так - же он может быть именован <slot name="myslot">)

События

  • beforeCreate
  • created
  • beforeMount
  • mounted
  • beforeUpdate
  • updated
  • beforeDestroy
  • destroyed
  • activated
  • deactivated
  • errorCaptured

Хуки

  • created - Компанент собран, но не помещен в дом

Расширения / Компоненты / Процессоры

Ссылки

Обучение / Трюки / Статьи

Видео

RU

En

UI + Vue (UI Bootstrap итд) - [UI + Vue (UI Bootstrap итд)]

$
0
0

Netstat - [Netstat]

$
0
0

Netstat

$ netstat-nalt|grep ESTABLISHED
tcp4       00  192.168.1.104.60255    162.13.157.151.7617    ESTABLISHED
tcp4       00  192.168.1.104.59963    68.232.34.200.443      ESTABLISHED

Синтаксис

netstat [-Aan] [-f семейство_адресов] [-I интерфейс] [-p имя_протокола] [система] [core] 
netstat [-n] [-s] [-i | -r] [-f семейство_адресов] [-I интерфейс] [-p имя_протокола] [система] [core] 
netstat [-n] [-I интерфейс] интервал [система] [core]

Примеры

  • netstat -paltn|grep LISTEN
  • netstat -lpna|grep 53
  • netstat -ltupn
  • netstat -lantp | grep ESTABLISHED |awk '{print $5}' | awk -F: '{print $1}' | sort -u

Описание

Команда netstat показывает содержимое различных структур данных, связанных с сетью, в различных форматах в зависимости от указанных опций.

Использование

Первая форма команды показывает список активных сокетов для каждого протокола. Вторая форма выбирает одну из нескольких других сетевых структур данных.Форма показывает динамическую статистику пересылки пакетов по сконфигурированным сетевым интерфейсам; аргумент интервал задает, сколько секунд собирается информация между последовательными показами.

Значение по умолчанию для аргумента система — /unix; для аргумента core в качестве значения по умолчанию используется /dev/kmem.

Опции

-aПоказывать состояние всех сокетов; обычно сокеты, используемые серверными процессами, не показываются.
-AПоказывать адреса любых управляющих блоков протокола, связанных с сокетами; используется для отладки.
-iПоказывать состояние автоматически сконфигурированных (auto-configured) интерфейсов. Интерфейсы, статически сконфигурированные в системе, но не найденные во время загрузки, не показываются.
-nПоказывать сетевые адреса и порты как числа. netstat обычно показывает адреса как символы. Эту опцию можно использовать с любым форматом показа.
-rПоказать таблицы маршрутизации. При использовании с опцией -s, показывает статистику маршрутизации.
-sПоказать статистическую информацию по протоколам. При использовании с опцией -r, показывает статистику маршрутизации.
-fсемейство_адресов Ограничить показ статистики или адресов управляющих блоков только указанным семейством_адресов, в качестве которого можно указывать: inet Для семейства адресов AF_INET, или unix Для семейства адресов AF_UNIX.
-Iинтерфейс Выделить информацию об указанном интерфейсе в отдельный столбец; по умолчанию (для третьей формы команды) используется интерфейс с наибольшим объёмом переданной информации с момента последней перезагрузки системы. В качестве интерфейса можно указывать любой из интерфейсов, перечисленных в файле конфигурации системы, например, emd1 или lo0.
-pОтобразить идентификатор/название процесса создавшего сокет (-p, --programs display PID/Program name for sockets)
-lОтобразить только прослушиваемые сокеты
-uОтобразить только UDP сокеты
-tОтобразить только TCP сокеты

Выдаваемая информация

Активные сокеты

Для каждого активного сокета показывается протокол, размер очередей приема и получения (в байтах), локальный и удаленный адрес, а также внутреннее состояние протокола. Символьный формат, обычно используемый для показа адресов сокетов, — это либо:

имя_хоста.порт

если имя хоста указано, либо:

сеть.порт

если адрес сокета задает сеть, но не конкретный хост. Имена хостов и сетей берутся из соответствующих записей в файле /etc/hosts или /etc/networks.

Если имя сети или хоста для адреса неизвестно (или если указана опция -n), адрес показывается числами. Не указанные или «обобщенные» адреса и порты показываются как «*». Подробнее о соглашениях по именованию в Internet см. страницу справочного руководства inet.

Сокеты TCP

Для сокетов TCP допустимы следующие значения состояния:

CLOSED Закрыт. Сокет не используется.
LISTEN Ожидает входящих соединений.
SYN_SENT Активно пытается установить соединение.
SYN_RECEIVED Идет начальная синхронизация соединения.
ESTABLISHED Соединение установлено.
CLOSE_WAIT Удаленная сторона отключилась; ожидание закрытия сокета.
FIN_WAIT_1 Сокет закрыт; отключение соединения.
CLOSING Сокет закрыт, затем удаленная сторона отключилась; ожидание подтверждения.
LAST_ACK Удаленная сторона отключилась, затем сокет закрыт; ожидание подтверждения.
FIN_WAIT_2 Сокет закрыт; ожидание отключения удаленной стороны.
TIME_WAIT Сокет закрыт, но ожидает пакеты, ещё находящиеся в сети для обработки

Сетевые структуры данных

Показываемые данные зависят от выбора опции, -i или -r. Если указаны обе опции, netstat выберет -i.

Показ таблицы маршрутизации

Таблица маршрутизациипоказывает все имеющиеся маршруты (routes) и статус каждого из них. Каждый маршрут состоит из целевого хоста или сети и шлюза (gateway), который используется для пересылки пакетов. Столбец flags (флаги) показывает статус маршрута (U, если он включен), ведет ли маршрут на шлюз (G), был ли маршрут создан динамически при помощи перенаправления (D) и используется ли адрес индивидуального хоста (H) вместо адреса сети. Например, интерфейс закольцовывания (loopback transport provider), lo0, всегда имеет флаг H.

Прямые маршруты создаются для каждого интерфейса, подключенного к локальному хосту; поле gateway (шлюз) для таких записей показывает адрес выходного интерфейса.

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

Столбец use показывает количество пакетов, посланных по маршруту. Столбец interface показывает сетевой интерфейс, используемый маршрутом.

Суммарная статистика передачи данных

Когда задан аргумент интервал, netstat показывает таблицу суммарной статистической информации о переданных пакетах, ошибках и коллизиях. Первая показываемая строка данных, а также каждая последующая 24-я строка содержит суммарную статистическую информацию с момента последней перезагрузки системы. Каждая последующая строка показывает данные, накопленные за очередной указанный в командной строке интервал с момента последнего показа.

JQuery Вопросы / Ответы

$
0
0

JQuery Вопросы / Ответы

Q-A

Как сделать метод в JQuery

(function($){
jQuery.fn.doSomething=function(){returnthis.each(function(){var $this = $(this); 
      $this.click(function(event){
         event.preventDefault();// Your function goes here});});};})(jQuery); 
// А так можно бкдет потом вызвать метод 
$(document).ready(function(){
   $('#div1').doSomething();
   $('#div2').doSomething();});
  • A:
    $(function(){ 
      // Way 1function doosomething(){//Doo something} 
      // Way 2, equivalent to Way 1var doosomething =function(){// Doo something} 
      $("div.class").click(doosomething); 
      $("div.secondclass").click(doosomething); 
    });

Выполнение нескольких запросов AJAX через jQuery .post

Отправка данных форм ссылкой с помощью js/jquery

<script>
$(document).ready(function(){
   $("#submit").click(function(evt){
      evt.preventDefault();
      $("#form").submit();
   })
})
</script><formid="form"><aid="submit"href="#">Submit</a></form>

Отправить POST с ипользованием Ajax

A:

<formname="myform"id="myform"action=""method="POST"><!-- The Name form field --><labelfor="name"id="name_label">zoom</label><inputtype="text"name="zoom"id="zoom"size="30"value=""/><br></select><scripttype="text/javascript">
  $(document).ready(function(){
      $("#myform").submit( function () {    
        $.post(
         'post.php',
          $(this).serialize(),
          function(data){
            $("#results").html(data)
          }
        );
        return false;   
      });   
  });
</script>

Отправить POST с ипользованием Ajax

$('select').change(function(){
  var v = $(this).val();
 
	$.ajax({
	   type: "POST",
	   url: "obr.php",
	   data: "val="+v,
	   success: function(msg){
	     alert( "Data Saved: " + msg );
	   }
	 });
 
});

Модальное окно

    $("body").on("click",".js-user-confirm-modal",function(){var id = $(this).data("id");var deal = $(this).data("deal");
        $.ajax({
            method:"GET",
            url:"<?= $get_user_form?>?userId="+id+"&dealId="+deal,
            dataType:"html",}).done(function( data ){
            $(".js-user-modal-content").html(data);
            $("#userConfirm").modal("show");});});
<h4>Покупатель
    <ahref="javascript:void(0)"class="js-user-confirm-modal"><spanclass="glyphicon glyphicon-pencil"></span></a></h4>
<divclass="modal fade"id="userConfirm"tabindex="-1" role="dialog" aria-labelledby="myModalLabel"><divclass="modal-dialog" role="document"><divclass="modal-content js-user-modal-content">
        ...
        </div></div></div>

Компоненты - [UI]

$
0
0

Компоненты

Заголовок

router

Состояния / Store

HTTP clients like ($.get(), $.post())

Лоадеры

При использовании vue-loader или vueify шаблоны внутри файлов *.vue будут скомпилированы в JavaScript на этапе сборки. Вам не потребуется компилятор в финальной сборке, а значит можно использовать сборки runtime-only.

Виджеты / Компоненты

Списки

Фома

Календарь / Выбор даты / Выбор времени

Пагинатор

Дерево / Списки

Автокомплит

Select 2 и аналоги

Драг анд Дроп

Таблицы

Картинки / Обработка

Редакторы

Поиск

Слайдеры

Графики

Остальные

Репозитории / Каталоги


Документация

$
0
0

Документация

Рабочий процесс

Объект VueJs

Vue.use({
    install:function(Vue, options){ 
        Vue.mixin({ 
        }); 
},{
    createComputed:true}); 
var app =new Vue({// Используется в раннем связывании
    el:'#app',
    name:'nameApp',//
    props:[],//
    data(){},//
    methods:{},//
    computed:{},//
    watch:{},//
    components:{},// Событие перед созданием компонента
    beforeCreate(){},// Событие после создания компонента
    created(){},// 
    beforeMount(){},});

Глобальная конфигурация

Vue.config - это объект, содержащий глобальные конфигурации Vue. Вы можете изменить свои свойства, перечисленные ниже, перед загрузкой приложения:

  • Vue.config.silent = true
  • Vue.config.devtools = true
  • Vue.config.errorHandler = function (err, vm, info) { ... }
  • Vue.config.warnHandler = function (msg, vm, trace) { ... }
  • Vue.config.ignoredElements = [
    /^ion-/,
    'another-web-component' ]
  • Vue.config.keyCodes = {}

Конструкции html (атрибуты)

  • v-bind, : - Связывает HTMLатрибут с переменными или методом (:href, :src), также можно применять java-script выражения
  • v-on, @ - Методы (click, change, blur, etc) или в нативной декларации (onClick, onChange, onBlur)
  • v-model - Связывает входной параметр value и событие input (двусторонняя привязка)
  • v-for - Конструкциия for для массива или для массива возвращенного методом
    <div :v-for="method in methods"></div>
  • v-if - Конструкция if значение переменной или переменая возращаемоя методом (скрывает или показывает тэг)
  • v-html - Вывод HTML
  • v-show -
  • :is - наименование компонента, если по какой-либо причине нельзя испозовать тег в качестве названия компонента
    <div :is="com1"><div><!-- или --><com-1></com-1>

Свойства объекта

  • data: {}
  • methods: {}
  • computed: {} - Отслеживает переменные внутри методов декларированных в computed (возвращает значение)
  • props: [] - Аналогично объявлению входящих в функцию параметрах
  • wath: {} - Отслеживает изменение именованных как метод переменных
  • template: "" -
  • model: {}
  • components: {} - Список копонентов
  • filters: {} - Применяются для обработке в выводе {{ | filterName}}
  • directives: {} - Методы представляют из себя директивы v-todo-focus, имена методов указываются без v-
    • Пример
      <inputclass="edit"type="text" v-model="todo.title" v-todo-focus="todo == editedTodo" @blur="doneEdit(todo)" @keyup.enter="doneEdit(todo)" @keyup.esc="cancelEdit(todo)">
  • mountend: {} -

Методы объекта

  • this.$emit() - Вызов метода дочернего компанента
  • this.$el - виртуальный дом
  • this.$mount(selector) - При этом необходимо из app удалить указание елемента el
  • this.$refs - Ссылки на реальный дом елементы
    • <element-name ref="">
  • this.$resource - Сторонний модуль vue-resource (не входит в vuejs)
  • this.$slots - Позмоляет передавать HTML, в качестве строки (В шаблоне необходимо использовать тэг <slot>, так - же он может быть именован <slot name="myslot">)

События

  • beforeCreate
  • created
  • beforeMount
  • mounted
  • beforeUpdate
  • updated
  • beforeDestroy
  • destroyed
  • activated
  • deactivated
  • errorCaptured

Хуки

  • created - Компанент собран, но не помещен в дом

Репозитории - создано

UI - [UI]

$
0
0

UI

Homebrew - [list]

$
0
0

Homebrew

ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go)"

Update

  • brew update

Repaire

  • brew doctor

Install / Options / Info

  • brew install nginx-full
  • brew options nginx-full - Список доступных ключей/опций для установки
  • rew info nginx-full - Информация о пакете
  • brew install --ignore-dependencies htop - Без учета зависимостей и дополнительных проверок

Репозиторий

Установка определенных версий

Errors / Ошибки

Error: Cowardly refusing to `sudo brew install`
You can use brew with sudo, but only if the brew executable is owned by root.
However, this is both not recommended and completely unsupported so do so at
your own risk.

Исправление

# sudo chown -R $USER /usr/local
# sudo chown -R $USER /Library/Caches/Homebrew

Восстановление ревизий

$ cd `brew --cellar`
$ git reset --hard HEAD

Установка / Удаление репозиториев

Установка

$ brew tap homebrew/versions

Удаление

$ brew untap homebrew/versions

Просмотр

list

Список пакетов

$ brew list|grep php
 
php70
php70-amqp
php70-event
php70-igbinary
php70-intl
php70-mcrypt
php70-mongodb
php70-pcntl
php70-pdo-pgsql
php70-redis
php70-ssh2
php70-xdebug
php70-yaml

Список необновленных пакетов

$ brew outdated
 
jasper (1.900.21)< 2.0.2
libgphoto2 (2.5.10)< 2.5.11
libicns (0.8.1_1)< 0.8.1_3
homebrew/php/php70-pdo-pgsql (7.0.12_4)< 7.0.13_5
winetricks (20161012)<20161107

Вывод с указанием версии пакета с указанием пакетов которые надо обновить

$ brew list --versions--updates|grep php
php70 7.0.13_6
php70-amqp 1.7.1
php70-event 2.0.0
php70-igbinary HEAD-cb6bca5
php70-intl 7.0.13_7
php70-mcrypt 7.0.13_5
php70-mongodb HEAD
php70-pcntl 7.0.13_5
php70-pdo-pgsql 7.0.12_4
php70-redis HEAD
php70-ssh2 HEAD
php70-xdebug 2.4.1
php70-yaml HEAD

Список файлов в пакете

$ brew ls--verbosenano/usr/local/Cellar/nano/3.2/INSTALL_RECEIPT.json
/usr/local/Cellar/nano/3.2/bin/nano/usr/local/Cellar/nano/3.2/bin/rnano
/usr/local/Cellar/nano/3.2/.brew/nano.rb
/usr/local/Cellar/nano/3.2/ChangeLog
/usr/local/Cellar/nano/3.2/AUTHORS
/usr/local/Cellar/nano/3.2/README
/usr/local/Cellar/nano/3.2/TODO
/usr/local/Cellar/nano/3.2/COPYING
/usr/local/Cellar/nano/3.2/NEWS
/usr/local/Cellar/nano/3.2/share/man/man5/nanorc.5
/usr/local/Cellar/nano/3.2/share/man/man1/rnano.1
/usr/local/Cellar/nano/3.2/share/man/man1/nano.1

show

Переключение пакетов

$ brew unlink php70
$ brew link php71
$ brew switch php71 70

Заморозка версии

Бывает такое, когда нада зафиксировать формулу от обновлений с помощью brew upgrade Для реализацци этой задачи воспользуйтесь brew pin, а когда нада опять возобновить возможность обновлений просто выполните brew unpin postgresql-9.4

Замораживаем

#  brew pin postgresql-9.4

Размораживаем

#  brew unpin postgresql-9.4

Development

  • brew tap homebrew/versions
  • brew install autoconf automake gcc47 pcre
  • brew install autoconf autoconf-archive automake libtool icu4c curl

Скрипт / Установщики / Настройка

Ссылки

Yii2 Framework projects / Проекты - [CMF / CMS / CRM]

$
0
0

Yii2 Framework projects / Проекты

Поиск проектов / Каталоги / Репозитории

Поиск

Репозитории

Проекты

Списки проектов

CMF / CMS / CRM

Ticket

Hosting panels

Social

Invoices

Ecom / Shop

Компании / Разработчики

Themes

Статистика

Torrent

Telegram

Docker - [Установка]

$
0
0

Docker

VIRTUAL MACHINES CONTAINERS
Virtual machines include the application, the necessary binaries and libraries, and an entire guest operating system -- all of which can amount to tens of GBs. Containers include the application and all of its dependencies --but share the kernel with other containers, running as isolated processes in user space on the host operating system. Docker containers are not tied to any specific infrastructure: they run on any computer, on any infrastructure, and in any cloud.

Установка

nano /etc/apt/sources.list

 deb https://apt.dockerproject.org/repo debian-stretch main

Использование

Работа с образами / Images

Для справки
$ docker image

Вывести список образов

$ docker images
REPOSITORY                   TAG                 IMAGE ID            CREATED             SIZE
yii2_php                     latest              6a950c96e01d        23 hours ago        159MB

Удалить образ

$ docker image rm 6a950c96e01d

Удалить все образы

$ sudo docker rm-f $(sudo docker ps-a -q)
$ sudo docker rmi -f $(sudo docker images -q)

Анализировать образ

$ docker image inspect 6a950c96e01d
[{"Id": "sha256:6a950c96e01de12b463f1fce232b48f530c487c2d7af5fef2e59c693c21c8af1",
        "RepoTags": ["yii2_php:latest"],
        "RepoDigests": [],
        "Parent": "sha256:a0883c
...
}

Избавляемся от неиспользуемых образов

$ docker image prune

Список образов

Алиас к
$ docker images
$ docker image ls
REPOSITORY                   TAG                 IMAGE ID            CREATED             SIZE
yii2_php                     latest              6a950c96e01d        23 hours ago        159MB
yii2_nginx                   latest              878bb2a77dfa        27 hours ago        23.2MB
yii2_kibana                  latest              e3f6594b57e1        27 hours ago        221MB
yii2_elasticsearch           latest              117a536c2655        27 hours ago        129MB
yii2_redis                   latest              546a364104fd        27 hours ago        31.1MB
yii2_mariadb                 latest              03ddc39bcf15        27 hours ago        204MB

Работа с контейнерами / Containers

Для справки
$ docker
$ docker exec--help

Запуск контейнера

Необходим Dockerfile
$ docker up

Список запущеных контейнеров

$ docker ps
CONTAINER ID        IMAGE                COMMAND                   CREATED             STATUS              PORTS                              NAMES
a50423920e0d        yii2_php             "/usr/sbin/php-fpm -F"23 hours ago        Up 23 hours         9001/tcp, 0.0.0.0:9001->9000/tcp   yii2_php_1
fa24abd60049        yii2_nginx           "sh -c 'envsubst \"`e…"24 hours ago        Up 24 hours         0.0.0.0:80->80/tcp                 yii2_n

Подсоеденение к контейнеру

Проверить предварительно на наличие запрашиваемой оболочки. В alpine по умолчанию нет bash
$ sudo docker exec-i-t a50423920e0d /bin/bash
$ sudo docker exec-i-t a50423920e0d /bin/sh

Запустить контейнер

$ docker start a50423920e0d

Остановить контейнер

$ docker stop a50423920e0d

Пребить контейнер

$ docker kill a50423920e0d

Использование docker-composer.yml

Для справки
$ docker-compose
$ docker-compose exec

docker-composer.yml

docker-composer.yml

version: '2'
services:
  mariadb:
    build: ./provision/mariadb
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_DATABASE: skringo
      MYSQL_USER: skringo
      MYSQL_PASSWORD: skringo
    ports:
      - '3306:3306'
    expose:
      - '3306'
    volumes:
      - './logs/mysql:/var/log/mariadb'
  redis:
    build: ./provision/redis
    restart: always
    environment:
      - REDIS_VERSION=4.0.9
    ports:
      - '6379:6379'
    expose:
      - '6379'
  redis-commander:
    container_name: redis-commander
    hostname: redis-commander
    image: rediscommander/redis-commander:latest
    build: .
    restart: always
    environment:
    - REDIS_HOSTS=local:redis:6379
    ports:
    - 8081:8081
  nginx:
    build: ./provision/nginx
    restart: always
    links:
      - php
    volumes:
      - './:/app'
      - './provision/nginx/etc/conf.d/yii2.advanced.template:/etc/nginx/conf.d/site.template'
      - './logs/nginx:/var/log/nginx'
    environment:
      - NGINX_VERSION=1.13.12-1~stretch
      - NGINX_HOST=skringo.loc
      - NGINX_PORT=80
    ports:
      - '80:80'
    command: 'sh -c "envsubst \"`env | awk -F = ''{printf \" $$%s\", $$1}''`\" < /etc/nginx/conf.d/site.template > /etc/nginx/conf.d/default.conf && nginx -g ''daemon off;''"'
  elasticsearch:
    build: ./provision/elasticsearch
    restart: always
    ports:
      - '9200:9200'
    expose:
      - '9200'
    environment:
      - ELASTICSEARCH_VERSION=5.6.9
      - JAVA_ALPINE_VERSION=8.151.12-r0
      - JAVA_VERSION=8u151
      - LANG=C.UTF-8
      - cluster.name=docker-cluster
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms1g -Xmx1g"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    mem_limit: 1g
  kibana:
    build: ./provision/kibana
    links:
      - elasticsearch
    ports:
      - '5601:5601'
  php:
    build: ./provision/php/7.1
    restart: always
    links:
      - mariadb
      - redis
      - elasticsearch
    ports:
      - '9001:9000'
    expose:
      - '9000'
      - '9001'
    environment:
      - PHP_IDE_CONFIG=serverName=skringo.loc
    volumes:
      - './:/app'
      - './provision/php/7.1/xdebug.ini:/etc/php7/conf.d/xdebug.ini'
      - './logs/php7:/var/log/php7'
      - './logs/php7/xdebug:/tmp/xdebug_log'

networks:
  default:
    external:
      name: nginx-proxy

Подсоеденение к контейнеру

$ docker-compose exec php /bin/sh

Где php название используемого сервиса / services

Запуск с использованием локального конфига

$ docker-compose -f docker-compose.yml -f docker-compose-local.yaml up -d

Особенности работы с MAC OS

Все контейнеры в MAC OSнаходятся в виртуальной машине qcow2 и находятся по адресу /Users/mirocow/Library/Containers/com.docker.docker/Docker.qcow2

  • где mirocow имя вашего пользователя
Для MacOs устанавливается в отдельную виртуальную машину. К которой можно законектится с помощью tty.
screen ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/tty

Автоматический запуск контейнеров в Debian

System V

nano /etc/init.d/portainer

#!/bin/sh 
### BEGIN INIT INFO# Provides:		portainer# Required-Start:	$docker# Required-Stop:	$docker# Default-Start:	2 3 4 5# Default-Stop:		0 1 6# Short-Description:	Portainer Services### END INIT INFO 
set-e 
PROJECT_NAME=portainer
YAMLFILE=/var/lib/jenkins/workspace/portainer/docker-compose.yml
OPTS="-f $YAMLFILE -p $PROJECT_NAME"UPOPTS="-d --no-recreate --no-build --no-deps" 
. /lib/lsb/init-functions
 
case"$1"in
    start)
        log_daemon_msg "Starting service portainer""portainer"||true
        docker-compose $OPTS up $UPOPTS;; 
    stop)
        log_daemon_msg "Stopping service portainer""portainer"||true
        docker-compose $OPTS stop
        ;; 
    reload)
        log_daemon_msg "Reloading service portainer""portainer"||true
        docker-compose $OPTS up $UPOPTS;; 
    restart)
        docker-compose $OPTS stop
        docker-compose $OPTS up $UPOPTS;; 
    status)status=$(docker ps-aqf"name=${PROJECT_NAME}")if[!-z"${status}"]; thenecho"Already running ID: ${status}"fi;; 
    *)
        log_action_msg "Usage: /etc/init.d/portainer {start|stop|restart|reload|status}"||trueexit1;;esac 
exit0

System D

nano /etc/systemd/system/portainer.service

[Unit]Description=Portainer service with docker-compose
Requires=docker.service
After=docker.service
 
[Service]Restart=always
 
WorkingDirectory=/var/lib/jenkins/workspace/portainer/ 
# Remove old containers, network and volumesExecStartPre=/usr/bin/docker-compose -f/var/lib/jenkins/workspace/portainer/docker-compose.yml down -vExecStartPre=-/bin/bash-c'docker network rm docker_portainer_net'ExecStartPre=-/bin/bash-c'docker ps -aqf "name=portainer" | xargs docker rm' 
# Compose upExecStart=/usr/bin/docker-compose -f/var/lib/jenkins/workspace/portainer/docker-compose.yml up
 
# Compose down, remove containersExecStop=/usr/bin/docker-compose -f/var/lib/jenkins/workspace/portainer/docker-compose.yml down
 
[Install]WantedBy=multi-user.target

Проблемы и их решения

Circular import between fpm and nginx

Возникает при циклическом связывании контейнеров (2-ух сторонее связывание) В качестве решенияпроблемы, на данный момент, можно воспользоваться прокси сервером/контейнером docker-grand-ambassador

fpm:
  build: ./build/fpm
  links:
    - ambassador:nginx
nginx:
  build: ./build/nginx
  links:
    - ambassador:fpm
ambassador:
  image: cpuguy83/docker-grand-ambassador
  volumes:
    - "/var/run/docker.sock:/var/run/docker.sock"
  command: "-name testapp_fpm_1 -name testapp_nginx_1"

ERROR: Couldn't connect to Docker daemon - you might need to rundocker-machine start default`

скорее всего вам потребуется сделать следующее:

$ docker-machine create --driver=xhyve dev --xhyve-experimental-nfs-share

Компоненты

  • Репозитории - Репозитории Dokerfile - ов
  • docker-compose - Компановщик контейнеров
  • docker-machine - Это инструмент, позволяющий управлять удалёнными хостами Docker с локального компьютера.
  • Docker Toolbox - Комплект необходимых программ для Windows или MacOs (Внимание!!! ставит VirtualBox )
  • Weave Scope - Это очень удобный и наглядный сервис для мониторинга Docker контейнеров.
  • cAdvisor - Система мониторинга за контейнерами
  • DockStation - Отличный клиент для работы с docker-compose, docker-composer.yml :!:

Репозитории

Документация / Статьи

Другие системы виртуализации

Документация по Yii 2 Framework - [Active Record]

$
0
0

Документация по Yii 2 Framework

Configuration

<?phpreturn['components'=>['db'=>['class'=>'yii\db\Connection','dsn'=>'mysql:host=localhost;dbname=yii2','username'=>'yii2','password'=>'<password>',],'cache'=>['class'=>'yii\caching\DummyCache',],'urlManager'=>['rules'=>['<action:(login|logout|about)>'=>'site/<action>', 
                // ... 
                ['class'=>'app\components\CarUrlRule','connectionID'=>'db',...],],'enablePrettyUrl'=>true,'enableStrictParsing'=>true,'showScriptName'=>false,'suffix'=>'.html',],]];

URL Management

echo \Yii::$app->urlManager->createUrl(['site/page','id'=>'about']);// /index.php/site/page/id/about/echo \Yii::$app->urlManager->createUrl(['date-time/fast-forward','id'=>105])// /index.php?r=date-time/fast-forward&id=105echo \Yii::$app->urlManager->createAbsoluteUrl('blog/post/index');// http://www.example.com/index.php/blog/post/index/
$route=[// ... path + params]; 
$url= \Yii::$app->urlManager;$url->createUrl($route);$url->createAbsoluteUrl($route); 
$url= Yii::$app->urlManager->createUrl($route);$url= Yii::$app->urlManager->createAbsoluteUrl($route);

Конфигурация

<?phpreturn[// ...'components'=>['urlManager'=>['enablePrettyUrl'=>true,'showScriptName'=>false,'enableStrictParsing'=>true,'suffix'=>'.html','rules'=>['<action:(login|logout|about)>'=>'site/<action>', 
                // ... 
                ['class'=>'app\components\CarUrlRule','connectionID'=>'db',...],],],],];

Url

yii\helpers\Url::toRoute

echo Url::toRoute([''],$schema=false);// currently active routeecho Url::toRoute(['view','id'=>'contact'],$schema=false);// same controller, different actionecho Url::toRoute(['post/index'],$schema=false);// same module, different controller and actionecho Url::toRoute(['/site/index'],$schema=false);// absolute route no matter what controller is making this callecho Url::toRoute(['post/read','id'=>100,'#'=>'title'],$schema=false)
echo Url::toRoute('',$schema=false);// currently active routeecho Url::toRoute('post/index',$schema=false);// same module, different controller and actionecho Url::toRoute('/site/index',$schema=false);// absolute route no matter what controller is making this call

yii\helpers\Url::to

echo Url::to('',$schema=false);// currently active routeecho Url::to('post/index',$schema=false);// same module, different controller and actionecho Url::to('/site/index',$schema=false);// absolute route no matter what controller is making this call
echo Url::to('@web',$schema=false);echo Url::canonical();// get canonical URL for the curent pageecho Url::home();// get home URLecho Url::remember();// save URL to be used laterecho Url::previous();// get previously saved URL
  • $schema = true - Абсолютный адрес
  • $schema = 'https' - Указание на испоользование шифрованного протокола

Синоним для yii\helpers\Url::toRoute

echo Url::to([''],$schema=false);// currently active routeecho Url::to(['view','id'=>'contact'],$schema=false);// same controller, different actionecho Url::to(['post/index'],$schema=false);// same module, different controller and actionecho Url::to(['/site/index'],$schema=false);// absolute route no matter what controller is making this callecho Url::to(['post/read','id'=>100,'#'=>'title'],$schema=false)

Примеры использоватия можно глянуть в тестах https://github.com/yiisoft/yii2/blob/master/tests/unit/framework/helpers/UrlTest.php

yii\helpers\Html::url (old)

echo Html::url(['']);// currently active routeecho Html::url(['view','id'=>'contact']);// same controller, different actionecho Html::url(['post/index']);// same module, different controller and actionecho Html::url(['/site/index']);// absolute route no matter what controller is making this callecho Html::url(['post/read','id'=>100,'#'=>'title'])
echo Html::url('');// currently active routeecho Html::url('post/index');// same module, different controller and actionecho Html::url('/site/index');// absolute route no matter what controller is making this call

вместо старых методов нада использовать yii\helpers\Url::to

Примеры использоватия можно глянуть в тестах https://github.com/yiisoft/yii2/blob/master/tests/unit/framework/helpers/UrlTest.php

createUrl

echo$this->createUrl([''],$schema=null);// currently active routeecho$this->createUrl(['view','id'=>'contact'],$schema=null);// same controller, different actionecho$this->createUrl(['post/index'],$schema=null);// same module, different controller and actionecho$this->createUrl(['/site/index'],$schema=null);// absolute route no matter what controller is making this callecho$this->createUrl(['post/read','id'=>100,'#'=>'title'],$schema=null)
echo$this->createUrl('',$schema=null);// currently active routeecho$this->createUrl('post/index',$schema=null);// same module, different controller and actionecho$this->createUrl('/site/index',$schema=null);// absolute route no matter what controller is making this call

createAbsoluteUrl (old)

Усли $this - это yii\web\Controller

echo$this->createAbsoluteUrl([''],$schema=null);// currently active routeecho$this->createAbsoluteUrl(['view','id'=>'contact'],$schema=null);// same controller, different actionecho$this->createAbsoluteUrl(['post/index'],$schema=null);// same module, different controller and actionecho$this->createAbsoluteUrl(['/site/index'],$schema=null);// absolute route no matter what controller is making this callecho$this->createAbsoluteUrl(['post/read','id'=>100,'#'=>'title'],$schema=null)

вместо старых методов надо использовать yii\helpers::toRoute

Усли $this - это yii\web\Controller

echo$this->createAbsoluteUrl('',$schema=null);// currently active routeecho$this->createAbsoluteUrl('post/index',$schema=null);// same module, different controller and actionecho$this->createAbsoluteUrl('/site/index',$schema=null);// absolute route no matter what controller is making this call

вместо старых методов надо использовать yii\helpers::toRoute

Request

GET

Yii::$app->request->get();
Yii::$app->request->getQueryParams();
Yii::$app->request->getQueryParam('File');
Yii::$app->request->get('File');

POST

Yii::$app->request->post();
Yii::$app->request->getBodyParams();
Yii::$app->request->getBodyParam('File');
Yii::$app->request->post('File');

View

CSS

$this->registerCssFile();

JS

$this->registerJsFile();

Вставка кода внутри представления

В примере производится вставка JS кода из assets c применением переменной в скрипте JS_FABRIC_CAR_URL

$this= Yii::$app->view;
<?php$this->registerJs('var JS_FABRIC_CAR_URL = "'. Html::url(['/core/ajax/fabric-car']).'";', View::POS_HEAD,'js-fabric-car-url');$publish= Yii::$app->assetManager->publish(Yii::getAlias('@app/modules/core/assets/js'));$this->registerJsFile($publish[1].'/block-select-car.js',[yii\web\JqueryAsset::className()],['position'=>View::POS_END]);?>

assetManager

'components'=>['assetManager'=>['class'=>'yii\web\AssetManager','forceCopy'=>true,],],
  • forceCopy - Включает постоянное обновление асетов

через ajaxSetup

Добавление csrfToken в Ajax запрос (Yii2)

$js_global_variables='
$.ajaxSetup({
        data: '. \yii\helpers\Json::encode([
            \yii::$app->request->csrfParam=> \yii::$app->request->csrfToken,]).'
    });'. PHP_EOL;$this->registerJs($js_global_variables, yii\web\View::POS_HEAD,'js_global_variables');

или через header

$js_global_variables='
$.ajaxPrefilter(function( options ) {
    if ( !options.beforeSend) {
        options.beforeSend = function (xhr) { 
            xhr.setRequestHeader("HTTP_X_CSRF_TOKEN", '. \yii::$app->request->csrfToken.');
        }
    }
});'. PHP_EOL;$this->registerJs($js_global_variables, yii\web\View::POS_HEAD,'js_global_variables');

или через JQuery

      $.ajax({
        url: 'http://site?controller/action',
        type: 'post',
        data: {payload: payload, _csrf: yii.getCsrfToken()},        
        dataType: 'json',
      }).success(function(response) {
      });

Form

Ajax

Pjax

use app\modules\cabinet\components\CabinetController;use app\models\Image; 
class CameraController extends CabinetController
{publicfunction actionFavorite(){$id=(int) Yii::$app->request->post('id'); 
        if(!$id){returnfalse;} 
        $image= Image::findOne($id); 
        if($image->f_fav){
            Image::updateAll(['f_fav'=>0],['id'=>$id]);return$this->renderPartial('favorite',['id'=>$id,'f_fav'=>0]);}else{
            Image::updateAll(['f_fav'=>1],['id'=>$id]);return$this->renderPartial('favorite',['id'=>$id,'f_fav'=>1]);} 
        returnfalse;}}

Вывод партиала в main.php

<?=$this->render('favorite',['id'=>1,'f_fav'=>true);?>

Отображаемая вьюха favorite.php

<?phpuse yii\widgets\Pjax;use yii\helpers\Html;?><?php Pjax::begin();?><?= Html::beginForm(['favorite'],'post',['data-pjax'=>'','class'=>'form-inline']);?><?= Html::hiddenInput('id',$id)?><?= Html::submitButton($f_fav ? '<i class="fa fa-star"></i>':'<i class="fa fa-star-o"></i>',[])?><?= Html::endForm()?><?php Pjax::end();?>

Виджеты / Widgets

Model / AR / DAO / Запросы к БД

Как получить модель из модуля

$user= Yii::$app->getModule("user")->model("User",["scenario"=>"register"]);$profile= Yii::$app->getModule("user")->model("Profile");

Active Record

class Post extends ActiveRecord
{publicfunction getCreator(){return$this->hasOne('User',['id'=>'user_id']);}publicfunction getComments(){return$this->hasMany('Comment',['post_id'=>'id']);}publicfunction getTrustComments($isTrust=true){return$this->hasMany('Comment',['post_id'=>'id'])->where('status = :status',[':status'=>$isTrust ? self::TRUST:self::UNTRUST,])->orderBy('id');}}
$price= PriceItem::find()->select(['price','create_time'=>'DATE_FORMAT(create_time, "%d.%m.%Y")'])->where(['and',['price_list_form_id'=>$price_list_form_ids],['>','create_time','2015.01.01']])->orderBy(['price'=> SORT_ASC])->asArray()->one();
// we receive an ActiveQuery instance$query= Post::find(); 
// all posts$posts=$query->all(); 
// looking for all the posts with a condition$posts=$query->where(array('status'=> Post::DRAFT))->orderBy('time')->all(); 
// looking for a post $post=$query->where(['id'=>10,'status'=> Post::READ])->one(); 
// or easier: "where" condition can be transmitted directly to the factory method$post= Post::find(['id'=>10,'status'=> Post::READ]); 
// having transmitted to the factory method not a massive, but a number equivalent to the primary key search $post= Post::find(10)->where(['status'=> Post::READ])->one(); 
// we index the result to a necessary attribute$posts=$query->indexBy('title')->all(); 
// the result as an array$posts=$query->asArray()->all();
User::find()->where(['and',['phone_number'=>$phone],['<>','id',$user->id]])->exists();
User::find()->where(['or',['phone_number'=>$phone],['=','id',$user->id]])->exists();

Ключи в эллементах коллекции AR

$query= SparesCategory::find()->where(['parent_id'=>0]);$query->indexBy=function($row){// Ключ в который будет помещена возвращаемая модельreturn$row->id;};$categories=$query->all();
$quey= CarMark::find()->indexBy(function($row){return$row->id;})->all();

Создание модели из возвращаемы данных Command (с помощью populateRecord())

$sql="SELECT * FROM `tbl_spares_category` c
            LEFT JOIN tbl_form_spares_category fc ON fc.category_id = c.id
            WHERE fc.form_id = :form_id AND fc.category_id = :category_id";$select_marks= Yii::$app->db->createCommand($sql,[':form_id'=>$form_id,':category_id'=>$category_id,])->queryAll(); 
        foreach($marksas$row){ 
            // Only yii2 alpha//$mark = SparesCategoryForm::create($row); 
            $mark=new SparesCategoryForm;
            SparesCategoryForm::populateRecord($mark,$row); 
 
            if(isset($mark->id)){ 
              // do somethig 
            }}

Join

with()

Не делает SQL JOIN(), применяется не только в реляционых БД (NoSql) Применяется только для построений конструкций вида WHERE IN(), плюс наполняют relation

leftJoin()

Добавляет SQL LEFT JOIN(), применяется только в реляционыых БД, плюс наполняют relation

$this->joinWith([[relation_name]],true,'LEFT JOIN')

joinWith()

Добавляет SQL JOIN(), применяется только в реляционыых БД, плюс наполняют relation

// Выбираем MyModel с relation1 и relation2.// Все три забираем запросом с JOIN.$query= MyModel::find()->joinWith(['relation1','relation2']); 
$countQuery= clone $query;$pages=new Pagination(['totalCount'=>$countQuery->count(),'pageSize'=>15]); 
$items=$query->orderBy($sort->orders)->offset($pages->offset)->limit($pages->limit)// Забираем дополнительно relation3 и relation4.// Фильтровать по ним нам не нужно, так что будут// запросы вида WHERE ID IN (1,2,3,4) или аналоги// для noSQL.->with(['relation3','relation4'])->all();

https://github.com/yiisoft/yii2/blob/master/docs/guide/active-record.md#joining-with-relations

innerJoinWith()

Validate (Rules)

class User extends \yii\db\ActiveRecord
{// ... 
    publicfunction rule(){return[[['attribute1','attribute2',...],'validator class or alias',// specifies in which scenario(s) this rule is active.// if not given, it means it is active in all scenarios'on'=>['scenario1','scenario2',...],// the following name-value pairs will be used// to initialize the validator properties'property1'=>'value1','property2'=>'value2',// ...],[['attribute1','attribute2',...],'validator class or alias',// specifies in which scenario(s) this rule is active.// if not given, it means it is active in all scenarios'except'=>['scenario1','scenario2',...],// the following name-value pairs will be used// to initialize the validator properties'property1'=>'value1','property2'=>'value2',// ...],];} 
}

Пример использования в модели

if($User->load($_POST)){ 
      $User=new User;$Profile=new Profile; 
      // validate for ajax request$Profile->load($_POST);if(Yii::$app->request->isAjax){
          Yii::$app->response->format= Response::FORMAT_JSON;return ActiveForm::validate($User,$Profile);} 
      // validate for normal requestif($User->validate() and $Profile->validate()){// do somthing}}

Пример применения валидатора без использования модели

$email='test@example.com';$validator=new yii\validators\EmailValidator();if($validator->validate($email,$error)){echo'Email is valid.';}else{echo$error;}

Scenario

class User extends \yii\db\ActiveRecord
{// ... 
    publicfunction getProduct(){return$this->hasOne(Order::className(),['product_id'=>'id']);} 
    publicfunction scenarios(){return['userCreates'=>['attributes'=>['name','value'],'atomic'=>[self::OP_INSERT],],];} 
    publicfunction afterSave($insert){
        parent::afterSave($insert);if($this->getScenario()===='userCreates'){// FIXME: TODO: WIP, TBD}}}

Подробноhttps://github.com/yiisoft/yii2/blob/master/docs/guide/structure-models.md#scenarios-

Relation

class Customer extends \yii\db\ActiveRecord
{//publicfunction getOrders(){return$this->hasMany(Order::className(),['customer_id'=>'id']);} 
    //publicfunction getBigOrders($threshold=100){return$this->hasMany(Order::className(),['customer_id'=>'id'])->where('subtotal > :threshold',[':threshold'=>$threshold])->orderBy('id');} 
    // Вытащить данные из таблицы модели Item, используя связи из таблицы tbl_order_itempublicfunction getItems(){// Получить данные через таблицу tbl_order_itemreturn$this->hasMany(Item::className(),['id'=>'item_id'])->viaTable('tbl_order_item',['order_id'=>'id']);} 
    //public static function olderThan($query,$age=30){$query->andWhere('age > :age',[':age'=>$age]);}}
$customer= Customer::find(1);$orders=$customer->orders;$orders=$customer->getBigOrders(200)->all();$customers= Customer::find()->olderThan(50)->all();
$customer= Customer::find(1);$order=new Order();$order->comment='';$customer->link('orders',$customer);

Events

class Post extends ActiveRecord
{publicfunction init(){$this->on('beforeAction',function($event){// отменяем действие$event->isValid=false;});}}
$component->on('beforeAction',$handler);

Как получить SQL и Параметры из ActiveQuery

$query= Post::find()->where(array('id'=>10,'status'=> Post::READ))->createCommand(); 
// SQLecho$query->sql 
// Params:print_r($query->params)

Объекты доступа к данным (Data Access Objects, DAO)

Соеденение

Методы запроса

  • queryOne()
  • queryAll()
  • query()
  • queryScalar()
  • queryColumn()

Подробноhttps://github.com/yiisoft/yii2/blob/master/framework/db/Command.php

createCommand
$command=$connection->createCommand('SELECT * FROM tbl_post WHERE id=1');$post=$command->queryOne();
$connection->createCommand()->insert('tbl_user',['name'=>'Sam','age'=>30,])->execute();
$command=$connection->createCommand('UPDATE tbl_post SET status=1 WHERE id=1');$command->execute();
$connection->createCommand()->batchInsert('tbl_user',['name','age'],[['Tom',30],['Jane',20],['Linda',25],])->execute();
$connection->createCommand()->update('tbl_user',['status'=>1],'age > 30')->execute();
$connection->createCommand()->delete('tbl_user','status = 0')->execute();
$command=$connection->createCommand('SELECT * FROM tbl_post WHERE id=:id');$command->bindValue(':id',$_GET['id']);$post=$command->query();

Построитель запросов (Query Builder and Query)

$rows=(new \yii\db\Query())->select('id, name')->from('user')->limit(10)->all(); 
// which is equivalent to the following code: 
$query=(new \yii\db\Query())->select('id, name')->from('user')->limit(10); 
// Create a command. You can get the actual SQL using $command->sql$command=$query->createCommand(); 
// Execute the command:$rows=$command->queryAll();
$query=(new \yii\db\Query())->select('id, name')->from('user')->limit(10); 
// Create a command. You can get the actual SQL using $command->sql$command=$query->createCommand(Yii::$app->db); 
// Execute the command:$rows=$command->queryAll();

Простой спооб получить записи из указанной БД

$rows=(new \yii\db\Query())->select('id, name')->from('user')//->where([...])//->innerJoin('', '', [...])->limit(10)->createComand(Yii::$app->some_bd)->queryAll();

Подробно

Transactions

$transaction=$connection->beginTransaction();
try {$connection->createCommand($sql1)->execute();$connection->createCommand($sql2)->execute();// ... executing other SQL statements ...$transaction->commit();} catch(Exception $e){$transaction->rollback();}

Batch

Batch

foreach(Customer::find()->batch()as$customers){ 
} 
foreach(Customer::find()->batch(10)as$customers){// $customers — массив из 10 или менее объектов Customer}
$rows=[]; 
foreach($modelsas$model){if(!$model->validate()){// At least one model has invalid data 
        break;} 
    $rows[]=$model->attributes;}$rows=  \yii\helpers\ArrayHelper::getColumn($models,'attributes;');$postModel=new Post; 
Yii::$app->db->createCommand()->batchInsert(Post::tableName(),$postModel->attributes(),$rows)->execute();

Each

foreach(Customer::find()->each()as$customers){ 
} 
foreach(Customer::find()->each(10)as$customers){// $customers — массив из 10 или менее объектов Customer}

Controller

Как программно вызвать контроллер?

$className='backend\controllers\SiteController';$controller= Yii::createObject($className,[$id,$this]);

yii\helpers\Html (old)

// ['label' => 'Добавление', 'url' => ['/admin/user/create']]
Html::a("Log in here",["user/reset","hash"=>$hash,"sid"=>$sid]);
Html::url(["user/reset","hash"=>$hash,"sid"=>$sid]);

Подробноhttps://github.com/yiisoft/yii2/blob/master/docs/guide/url.md

Module

Submodule

Для работы сабмодуля, необходимо выполнить его подключение, через указание submodule namespace модуля

namespace mirocow\eav; 
class Module extends \yii\base\Module { 
    // ...publicfunction init(){ 
      // .. 
      $this->setModule('admin','yii\user\modules\admin\Module');} 
    // Пример перенаправления роута в саб модуль adminpublicfunction createController($route){ 
        return$this->getModule('admin')->createController(str_replace('admin/','',$route)); 
    } 
}

Helpers

Behaviors/Filters

publicfunction behaviors(){returnarray('access'=>array('class'=>'yii\web\AccessControl','rules'=>array(array('allow'=>true,'actions'=>array('admin'),'roles'=>array('@')),array('allow'=>false),),),);}

Behaviors/Date

publicfunction behaviors(){return[['class'=> TimestampBehavior::className(),'createdAtAttribute'=>'create_time',//'updatedAtAttribute' => 'update_time','value'=>new Expression('NOW()'),],];}

Session

Yii::$app->session->get('key');
Yii::$app->session->set('key','value');

setFlash

В контролере

Yii::$app->session->setFlash('info',$shell->output);return$this->redirect('/site');

return делать обязательно. инчаче после редиректа сообщение не выведется

Вывод стандартным способом

<?phpforeach(Yii::$app->session->getAllFlashes()as$key=>$message){echo'<div class="alert alert-'.$key.'">'.$message.'</div>';}?>

Вывод с помощью виджета loveorigami/yii2-notification-wrapper

<?= Wrapper::widget(['layerClass'=>'lo\modules\noty\layers\Noty',]);?>

Данный виджет поддерживает большое кол-во виджетов обображения таких как:

Library (Layer) Bower Project homepage Docs
Bootstrap Alert - http://getbootstrap.com/components/#alerts docs/Alert.md
Bootstrap Notify remarkable-bootstrap-notify https://github.com/mouse0270/bootstrap-notify docs/BootstrapNotify.md
Growl jquery-growl https://github.com/ksylvest/jquery-growl docs/Growl.md
iGrowl igrowl https://github.com/catc/iGrowl docs/Igrowl.md
jQuery Notify jquery.notify https://github.com/CreativeDream/jquery.notify docs/JqueryNotify.md
jQuery Notify Bar jqnotifybar https://github.com/dknight/jQuery-Notify-bar docs/JqueryNotifyBar.md
jQuery Toaster jquery.toaster https://github.com/scottoffen/jquery.toaster docs/JqueryToaster.md
jQuery Toast Plugin jquery-toast-plugin https://github.com/kamranahmedse/jquery-toast-plugin docs/JqueryToastPlugin.md
Lobibox lobibox https://github.com/arboshiki/lobibox docs/Lobibox.md
Notie notie https://github.com/jaredreich/notie docs/Notie.md
Notific8 notific8 https://github.com/ralivue/notific8 docs/Notific8.md
NotifIt notifit https://github.com/naoxink/notifIt docs/NotifIt.md
Notify.js notifyjs https://github.com/notifyjs/notifyjs docs/Notifyjs.md
Noty noty https://github.com/needim/noty docs/Noty.md
PNotify pnotify https://github.com/sciactive/pnotify docs/PNotify.md
Sweetalert sweetalert https://github.com/t4t5/sweetalert docs/Sweetalert.md
Toastr toastr https://github.com/CodeSeven/toastr docs/Toastr.md

Console

IsConsole

if(Yii::$app->request->isConsoleRequest){//}

Params / Параметры

<?php 
namespace console\controllers; 
use yii\console\Controller; 
class QueueController extends Controller
{public$pid_file=''; 
    publicfunction __get($name){$name=str_replace('-','_',$name); 
        return$this->$name;} 
    publicfunction __set($name,$value){$name=str_replace('-','_',$name); 
        $this->$name=$value;} 
 
    publicfunction options($actionID){return['pid-file'];} 
    publicfunction actionRun(){ 
    }}

User

RBAC

Access

'access'=>['class'=> \yii\web\AccessControl::className(),'rules'=>[['actions'=>['index'],'allow'=>false,'roles'=>['?'],],['actions'=>['index','update','view','create','delete'],'allow'=>true,'matchCallback'=>function(){return \Yii::$app->user->identity->role<= \Yii::$app->user->identity->MANAGER;}],],],

Components

Создание объекта компанента

$object= Yii::createObject(array('class'=>'MyClass','property1'=>'abc','property2'=>'cde',),$param1,$param2);

Theme

'view'=>array('theme'=>array('pathMap'=>array('@app/views'=>'@webroot/themes/basic'),'baseUrl'=>'@www/themes/basic',),),

Cache

// Создать зависимость от времени модификации файла example.txt.$dependency=new \yii\caching\FileDependency(['fileName'=>'example.txt']); 
// Данные устаревают через 30 секунд.// Данные могут устареть и раньше, если example.txt будет изменён.$cache->set($key,$data,30,$dependency); 
// Кэш будет проверен, если данные устарели.// Он также будет проверен, если указанная зависимость была изменена.// Вернется false, если какое-либо из этих условий выполнено.$data=$cache->get($key);

Зависимости

  • yii\caching\ChainedDependency: зависимость меняется, если любая зависимость в цепочке изменяется;
  • yii\caching\DbDependency: зависимость меняется, если результат некоторого определенного SQL запроса изменён;
  • yii\caching\ExpressionDependency: зависимость меняется, если результат определенного PHP выражения изменён;
  • yii\caching\FileDependency: зависимость меняется, если изменилось время последней модификации файла;
  • yii\caching\TagDependency: Связывает кэшированные данные элемента с одним или несколькими тегами. Вы можете аннулировать кэширование данных элементов с заданным тегом(тегами) по вызову. invalidate();

Кэширование запросов

$result=$db->cache(function($db){ 
    // Результат SQL запроса будет возвращен из кэша если// кэширование запросов включено и результат запроса присутствует в кэшеreturn$db->createCommand('SELECT * FROM customer WHERE id=1')->queryOne(); 
}); 
$result= Customer::getDb()->cache(function($db){return Customer::find()->where(['id'=>1])->one();});
$duration=60;// кэширование результата на 60 секунд$dependency=...;// параметры зависимости 
$result=$db->cache(function($db){ 
    // ... выполнять SQL запросы здесь ... 
    return$result; 
},$duration,$dependency);
$result=$db->cache(function($db){ 
    // SQL запросы, которые используют кэширование 
    $db->noCache(function($db){ 
        // SQL запросы, которые не используют кэширование 
    }); 
    // ... 
    return$result;});
// использовать кэширование запросов и установить срок действия кэша на 60 секунд$customer=$db->createCommand('SELECT * FROM customer WHERE id=1')->cache(60)->queryOne();
$result=$db->cache(function($db){ 
    // Используется кэширование SQL запросов 
    // не использовать кэширование запросов для этой команды$customer=$db->createCommand('SELECT * FROM customer WHERE id=1')->noCache()->queryOne(); 
    // ... 
    return$result;});

Локализация - i18N/intl

apt=get install php5-intl

Перевод (локализация проекта)

PHPUnit

добавить в конфигуратор композера composer.json

{
    "require-dev": {
        "phpunit/phpunit": "3.7.*"
    }
}
  • php composer.phar update
  • php vendor/bin/phpunit vendor/yiisoft/yii2/yii/test/

Статьи

Описание


PhpStorm IDE for PHP - [2017.3.2]

$
0
0

PhpStorm IDE for PHP

Отладка / Debug

Автогенерация кода

Существует куча рутинных задач, которые иногда выполняются самим фреймворком, а иногда требуют тупой ручной работы. PHPStorm помогает упростить некоторые [CTRL]+N, например:

Создание геттеров и сеттеров (Getters & Setters)

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

Создание PHPDoc

По сути действие аналогично тому, как если перед существующим методом начать писать

/**

и нажать Enter. Можно выбрать одну или несколько функций и на основании атрибутов и содержимого будет сформирован Doc Block.

Переназначение и реализация при наследовании (Override & Implementation) При создании класса потомка или реализации абстрактных методов, чтобы не допустить ошибку, обычно приходится лезть в класс предок и запоминать или копипастить название и атрибуты метода. Или проверять для всех ли абстрактных методов есть реализация и вспоминать что же там требуется для ArrayAccess.

Есть вариант получше:

  • [CMD] + I – Имплементация
  • [CMD] + O – Переназначение

После нажатия хоткея появляется окно где можно выбрать какие именно методы будем реализовывать. После выбора генерится соответствующий метод с соблюдением приватности и имена атрибутов, например так: public function createTable($drop = false)

{return parent::createTable($drop);}

Автоформатирование кода

Когда пишешь код сам, обычно форматирование получается само, но в ситуации, когда нужно поменять Code Style или пытаешься открыть чужой непривычно оформленный код, возникают проблемы. Можно смириться, а можно нажать [CMD] + [ALT] + L и IDE отформатирует код в соответствии с настройками (Preferences → Project Settings → Code Style → PHP)

Подсказки (Code Completition)

Для функций нужно писать PHPDoc с параметром @ return. Например:

/** @return SomeClass */function a(){[]}

Для переменных также можно указать комментарий:

/** @var $my_var SomeClass */

Тогда ниже для $my_var будет доступны подсказки

Для методов над классом можно указать PHPDoc

/** @method B foo() Описание метода */class B extends A {[]}

Если функция возвращает массив объектов

/** @return SomeObject[] */

Консоль

Многие фреймворки используют консоль для быстрого выполнения частых действий. Для Symfony, Zend и других популярных фреймворков PHPStorm поддерживает подсказки и автодополнение консольных команд в Command Line Tools Console [CMD] + [SHIFT] + X

Разновидности поиска

[CMD] + N – Find by Class Name

Поиск по имени класса. Удобно в больших проектах, когда всё зарыто вглубь директорий или просто неизвестно где находится. Убойности добавляет «умный поиск», т.к. ищется как по части названия класса, так и по первым буквам, например SomeVeryLongClass будет найден по «SVLC». Учитывает регистр букв, будьте внимательны.

UPD: «Умный поиск» разработчики называют Camel's Hump. Кстати в настройках можно сделать чтобы выделение слов, а также перемещение осуществлялось не целиком (до пробела), а именно по по словам (до заглавной буквы). Спасибо, yujin1st

[CMD] + [SHIFT] + N – Find by File Name

Поиск по имени файла. Аналогично поиску по имени класса использует «умный поиск».

UPD: Для нахождения файла по вложенности можно использовать слеш: some/deep/dir/with/file.txt найдется по «s/d/d/w/f», спасибо develop7

[CMD] + [SHIFT] + [ALT] + N – Find Symbol

Поиск любой функции/метода и констант, очень удобно, когда точно помнишь имя метода, а класс нет. Спасибо conf

[ALT] + [F7] – Find Usages

В момент когда курсор находится на имени класса или метода нажатие хоткея позволяет найти все использования в проекте или определенной части (Scope).

Есть вариант [CTRL] + [ALT] + [F7] — тот же поиск по использованиям, но в виде контекстного меню. Спасибо iPavel

[CTRL] + [SHIFT] + F – Find in Path

Поиск произвольной фразы по файлам проекта. При рефакторинге обычно хорошо дополняет Find Usages.

Не стоило бы писать о “просто поиске”, если бы не возможность ограничить директорию в котором будут искаться нужные штуки, или настроить Scope. Scope позволяет гибко настроить и сохранить область поиска, для использования в дальнейшем. Можно выкинуть из поиска, например, файлы фреймворка или сторонние либы.

PhpStorm license key

Ключи активации phpstorm Ver 8 - 9 (Windows / Linux / MacOs)

ключи

ключи

User Name:Learn Programming
===== LICENSE BEGIN =====
63758-12042010
00000Ryqh0NCC73lpRm!XVcxFChJ2g
TUR2lZtlLXrPLbQ66Gs8MHs51RvF2y
agoDlzne08Zm8VXbts1UMKE!EW4v8G
===== LICENSE END =====
User Name:Mr. Enrew
===== LICENSE BEGIN =====
9167-D38728T
000020QwaYAMfRP"lg"iY7ZOCtQ7Hw
Ety0BucaeyLzwzka899PsSMGiHkTYI
hUZlpca1ffezR0DyzFpdOki7jbVm8U
===== LICENSE END =====
User Name:Dr. Alban
===== LICENSE BEGIN =====
2604-D71052T
00001ikR7KznanEGNuWRag20JBc!fy
HVl4Rv8nyMgpBnoKcRfq0x!vXkBMH4
qGcM1PCMSv2QHhXXEeVZSTFhkZ4xb5
===== LICENSE END =====
Product  : PhpStorm
UserName : Mr. Endigo
===== LICENSE BEGIN =====
6401-D92210T
00001GlhmP0"p5a60X9!rZ4zBUB8Cl
UdFJuehu2PdaOh!CjXPrpBW6AfZzAW
ILtUpsRXUESs"HBcQNy!qofCzLSEix
===== LICENSE END =====
Product  : PhpStorm
UserName : Entony Clichkovsky
===== LICENSE BEGIN =====
8786-D23014T
00000zOS!U7K2P2nOUHZtUJPuopXDt
p55feQcokDPS31lsZ5vqqOVmCCl9Cx
WxVS!fALdMvW0LQ32YJImTyq!pWjS!
===== LICENSE END =====
Product  : PhpStorm
UserName : Roberto Almano
===== LICENSE BEGIN =====
8659-D34829T
00000ILT!byBeyH4Yvcykp"O2MwLGg
ZoUJbIVuwszN5yUoXBGbw5SUzpKUzn
UBXRi8m4IBzZmfX4EcCKNu8g4UxcdM
===== LICENSE END =====

Ключи активации phpstorm Ver 10 - 11 (Windows / Linux / MacOs)

phpstorm Ver 10 - 11

phpstorm Ver 10 - 11

  • Откройте активационное окно Select Help → Register…
  • Выберите пункт server license
  • Вставте в поле ввода http://idea.lanyus.com/
  • Наслаждайтесь

2016.1

2016.1

2016.1

  • Откройте активационное окно Select Help → Register…
  • Выберите пункт server license
  • Вставте в поле ввода http://idea.qinxi1992.cn
  • Наслаждайтесь

Сервер лицензий и блог его содателя: http://blog.lanyus.com/6.html

2016.2

2016.2

2016.2

  • Откройте активационное окно Select Help → Register…
  • Выберите пункт server license
  • Вставте в поле ввода http://114.215.133.70:41017
  • Наслаждайтесь

2016.2.1

2016.2.1

2016.2.1

  • Откройте активационное окно Select Help → Register…
  • Выберите пункт Activation code
  • Вставте в поле ввода ниже следующий код

License is valid till Feb 25, 2017

43B4A73YYJ-eyJsaWNlbnNlSWQiOiI0M0I0QTczWVlKIiwibGljZW5zZWVOYW1lIjoibGFuIHl1IiwiYXNzaWduZWVOYW1lIjoiIiwiYXNzaWduZWVFbWFpbCI6IiIsImxpY2Vuc2VSZXN0cmljdGlvbiI6IkZvciBlZHVjYXRpb25hbCB1c2Ugb25seSIsImNoZWNrQ29uY3VycmVudFVzZSI6ZmFsc2UsInByb2R1Y3RzIjpbeyJjb2RlIjoiSUkiLCJwYWlkVXBUbyI6IjIwMTctMDItMjUifSx7ImNvZGUiOiJBQyIsInBhaWRVcFRvIjoiMjAxNy0wMi0yNSJ9LHsiY29kZSI6IkRQTiIsInBhaWRVcFRvIjoiMjAxNy0wMi0yNSJ9LHsiY29kZSI6IlBTIiwicGFpZFVwVG8iOiIyMDE3LTAyLTI1In0seyJjb2RlIjoiRE0iLCJwYWlkVXBUbyI6IjIwMTctMDItMjUifSx7ImNvZGUiOiJDTCIsInBhaWRVcFRvIjoiMjAxNy0wMi0yNSJ9LHsiY29kZSI6IlJTMCIsInBhaWRVcFRvIjoiMjAxNy0wMi0yNSJ9LHsiY29kZSI6IlJDIiwicGFpZFVwVG8iOiIyMDE3LTAyLTI1In0seyJjb2RlIjoiUEMiLCJwYWlkVXBUbyI6IjIwMTctMDItMjUifSx7ImNvZGUiOiJSTSIsInBhaWRVcFRvIjoiMjAxNy0wMi0yNSJ9LHsiY29kZSI6IldTIiwicGFpZFVwVG8iOiIyMDE3LTAyLTI1In0seyJjb2RlIjoiREIiLCJwYWlkVXBUbyI6IjIwMTctMDItMjUifSx7ImNvZGUiOiJEQyIsInBhaWRVcFRvIjoiMjAxNy0wMi0yNSJ9XSwiaGFzaCI6IjMzOTgyOTkvMCIsImdyYWNlUGVyaW9kRGF5cyI6MCwiYXV0b1Byb2xvbmdhdGVkIjpmYWxzZSwiaXNBdXRvUHJvbG9uZ2F0ZWQiOmZhbHNlfQ==-keaxIkRgXPKE4BR/ZTs7s7UkP92LBxRe57HvWamu1EHVXTcV1B4f/KNQIrpOpN6dgpjig5eMVMPmo7yMPl+bmwQ8pTZaCGFuLqCHD1ngo6ywHKIQy0nR249sAUVaCl2wGJwaO4JeOh1opUx8chzSBVRZBMz0/MGyygi7duYAff9JQqfH3p/BhDTNM8eKl6z5tnneZ8ZG5bG1XvqFTqWk4FhGsEWdK7B+He44hPjBxKQl2gmZAodb6g9YxfTHhVRKQY5hQ7KPXNvh3ikerHkoaL5apgsVBZJOTDE2KdYTnGLmqxghFx6L0ofqKI6hMr48ergMyflDk6wLNGWJvYHLWw==-MIIEPjCCAiagAwIBAgIBBTANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDDA1KZXRQcm9maWxlIENBMB4XDTE1MTEwMjA4MjE0OFoXDTE4MTEwMTA4MjE0OFowETEPMA0GA1UEAwwGcHJvZDN5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxcQkq+zdxlR2mmRYBPzGbUNdMN6OaXiXzxIWtMEkrJMO/5oUfQJbLLuMSMK0QHFmaI37WShyxZcfRCidwXjot4zmNBKnlyHodDij/78TmVqFl8nOeD5+07B8VEaIu7c3E1N+e1doC6wht4I4+IEmtsPAdoaj5WCQVQbrI8KeT8M9VcBIWX7fD0fhexfg3ZRt0xqwMcXGNp3DdJHiO0rCdU+Itv7EmtnSVq9jBG1usMSFvMowR25mju2JcPFp1+I4ZI+FqgR8gyG8oiNDyNEoAbsR3lOpI7grUYSvkB/xVy/VoklPCK2h0f0GJxFjnye8NT1PAywoyl7RmiAVRE/EKwIDAQABo4GZMIGWMAkGA1UdEwQCMAAwHQYDVR0OBBYEFGEpG9oZGcfLMGNBkY7SgHiMGgTcMEgGA1UdIwRBMD+AFKOetkhnQhI2Qb1t4Lm0oFKLl/GzoRykGjAYMRYwFAYDVQQDDA1KZXRQcm9maWxlIENBggkA0myxg7KDeeEwEwYDVR0lBAwwCgYIKwYBBQUHAwEwCwYDVR0PBAQDAgWgMA0GCSqGSIb3DQEBCwUAA4ICAQC9WZuYgQedSuOc5TOUSrRigMw4/+wuC5EtZBfvdl4HT/8vzMW/oUlIP4YCvA0XKyBaCJ2iX+ZCDKoPfiYXiaSiH+HxAPV6J79vvouxKrWg2XV6ShFtPLP+0gPdGq3x9R3+kJbmAm8w+FOdlWqAfJrLvpzMGNeDU14YGXiZ9bVzmIQbwrBA+c/F4tlK/DV07dsNExihqFoibnqDiVNTGombaU2dDup2gwKdL81ua8EIcGNExHe82kjF4zwfadHk3bQVvbfdAwxcDy4xBjs3L4raPLU3yenSzr/OEur1+jfOxnQSmEcMXKXgrAQ9U55gwjcOFKrgOxEdek/Sk1VfOjvS+nuM4eyEruFMfaZHzoQiuw4IqgGc45ohFH0UUyjYcuFxxDSU9lMCv8qdHKm+wnPRb0l9l5vXsCBDuhAGYD6ss+Ga+aDY6f/qXZuUCEUOH3QUNbbCUlviSz6+GiRnt1kA9N2Qachl+2yBfaqUqr8h7Z2gsx5LcIf5kYNsqJ0GavXTVyWh7PYiKX4bs354ZQLUwwa/cG++2+wNWP+HtBhVxMRNTdVhSm38AknZlD+PTAsWGu9GyLmhti2EnVwGybSD2Dxmhxk3IPCkhKAK+pl0eWYGZWG3tJ9mZ7SowcXLWDFAk0lRJnKGFMTggrWjV8GYpw5bq23VmIqqDLgkNzuoog==
  • Наслаждайтесь

2016.3

2016.3

2016.3

  • Откройте активационное окно Select Help → Register…
  • Выберите пункт server license
  • Вставте в поле ввода http://114.215.133.70:41017
  • Наслаждайтесь

2016.3.2 - 2016.3.3

2016.3.2 - 2016.3.3 - Сервер лицензий

2016.3.2 - 2016.3.3 - Сервер лицензий

  • Откройте активационное окно Select Help → Register…
  • Выберите пункт server license
  • Вставте в поле ввода http://roothat.ru:1017или http://kadara.ru:1017
  • Наслаждайтесь

2016.3.2 - Сервис jetbrainscrack.jar

2016.3.2 - Сервис jetbrainscrack.jar

  • jetbrainscrack.jar.zip password: mirocow
  • Распаковываем в папку с вашим IDE /Applications/ВАШ IDE/Contents/bin
  • и добавляем в автозапуск сервер лицензий -javaagent:JetbrainsCrack.jar
  • запускаем нашу любимую IDE
  • Подходит для всего семейства IDE от JetBrains (IntelliJ IDEA, PhpStorm, PyCharm, RubyMine, WebStorm)
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ Jetbrains IDE Crack       by  Rover12421 ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

Unzip and copy JetbrainsCrack.jar to /Applications/IntelliJ IDEA.app/Contents/bin/JetbrainsCrack.jar

Open /Applications/IntelliJ IDEA.app/Contents/bin/idea.vmoptions
OR /Applications/PhpStorm.app/Contents/bin
OR /Applications/PyCharm.app/Contents/bin
OR /Applications/RubyMine.app/Contents/bin
OR Applications/WebStorm.app/Contents/bin

Append this line to the end of the file: "-javaagent:JetbrainsCrack.jar" and save.

Example of idea.vmoptions after editing:
————
-Xms128m
-Xmx750m
-XX:MaxPermSize=350m
-XX:ReservedCodeCacheSize=240m
-XX:+UseCompressedOops
-javaagent:JetbrainsCrack.jar
————

2017.1.1 - 2017.1.2

2017.1.1 - 2017.1.2 - Сервер лицензий

2017.1.1 - 2017.1.2 - Сервер лицензий

  • Откройте активационное окно Select Help → Register…
  • Выберите пункт server license
  • Вставте в поле ввода http://roothat.ru:1017/ (Пока работает)
  • Наслаждайтесь

January 30, 2018

CNEKJPQZEX-eyJsaWNlbnNlSWQiOiJDTkVLSlBRWkVYIiwibGljZW5zZWVOYW1lIjoibGFuIHl1IiwiYXNzaWduZWVOYW1lIjoiIiwiYXNzaWduZWVFbWFpbCI6IiIsImxpY2Vuc2VSZXN0cmljdGlvbiI6IkZvciBlZHVjYXRpb25hbCB1c2Ugb25seSIsImNoZWNrQ29uY3VycmVudFVzZSI6ZmFsc2UsInByb2R1Y3RzIjpbeyJjb2RlIjoiQUMiLCJwYWlkVXBUbyI6IjIwMTgtMDEtMzAifSx7ImNvZGUiOiJETSIsInBhaWRVcFRvIjoiMjAxOC0wMS0zMCJ9LHsiY29kZSI6IklJIiwicGFpZFVwVG8iOiIyMDE4LTAxLTMwIn0seyJjb2RlIjoiUlMwIiwicGFpZFVwVG8iOiIyMDE4LTAxLTMwIn0seyJjb2RlIjoiV1MiLCJwYWlkVXBUbyI6IjIwMTgtMDEtMzAifSx7ImNvZGUiOiJEUE4iLCJwYWlkVXBUbyI6IjIwMTgtMDEtMzAifSx7ImNvZGUiOiJSQyIsInBhaWRVcFRvIjoiMjAxOC0wMS0zMCJ9LHsiY29kZSI6IlBTIiwicGFpZFVwVG8iOiIyMDE4LTAxLTMwIn0seyJjb2RlIjoiREMiLCJwYWlkVXBUbyI6IjIwMTgtMDEtMzAifSx7ImNvZGUiOiJEQiIsInBhaWRVcFRvIjoiMjAxOC0wMS0zMCJ9LHsiY29kZSI6IlJNIiwicGFpZFVwVG8iOiIyMDE4LTAxLTMwIn0seyJjb2RlIjoiUEMiLCJwYWlkVXBUbyI6IjIwMTgtMDEtMzAifSx7ImNvZGUiOiJDTCIsInBhaWRVcFRvIjoiMjAxOC0wMS0zMCJ9XSwiaGFzaCI6IjUxOTU1OTMvMCIsImdyYWNlUGVyaW9kRGF5cyI6MCwiYXV0b1Byb2xvbmdhdGVkIjpmYWxzZSwiaXNBdXRvUHJvbG9uZ2F0ZWQiOmZhbHNlfQ==-QOxwjWvRwJz6vo6J6adC3CJ4ukQHosbPYZ94URUVFna/Rbew8xK/M5gP3kAaPh6ZDveFdtMR1UBoumq3eCwXtXM3U3ls5noB4LIr+QplVlCj2pK5uNq7g/feyNyQcHpSXtvhIOnXDBLOecB05DOsxzm0p7ulGGJoAInmHeb9mc0eYjqc4RPpUQfh6HSYBnvEnKMlLF5bz4KEtzmsvvgA55CwzwQ3gRitm5Q/wUT7AQCBdjmBfNUjKVQL6TSjSDPp56FUdEs4Aab8LqstA2DIMbxocO64rvytmcUeIwu8Mi5uq87KQP5AQMSMYb59Inbd+dmVfx5cJo3fRS4/5s3/Hg==-MIIEPjCCAiagAwIBAgIBBTANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDDA1KZXRQcm9maWxlIENBMB4XDTE1MTEwMjA4MjE0OFoXDTE4MTEwMTA4MjE0OFowETEPMA0GA1UEAwwGcHJvZDN5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxcQkq+zdxlR2mmRYBPzGbUNdMN6OaXiXzxIWtMEkrJMO/5oUfQJbLLuMSMK0QHFmaI37WShyxZcfRCidwXjot4zmNBKnlyHodDij/78TmVqFl8nOeD5+07B8VEaIu7c3E1N+e1doC6wht4I4+IEmtsPAdoaj5WCQVQbrI8KeT8M9VcBIWX7fD0fhexfg3ZRt0xqwMcXGNp3DdJHiO0rCdU+Itv7EmtnSVq9jBG1usMSFvMowR25mju2JcPFp1+I4ZI+FqgR8gyG8oiNDyNEoAbsR3lOpI7grUYSvkB/xVy/VoklPCK2h0f0GJxFjnye8NT1PAywoyl7RmiAVRE/EKwIDAQABo4GZMIGWMAkGA1UdEwQCMAAwHQYDVR0OBBYEFGEpG9oZGcfLMGNBkY7SgHiMGgTcMEgGA1UdIwRBMD+AFKOetkhnQhI2Qb1t4Lm0oFKLl/GzoRykGjAYMRYwFAYDVQQDDA1KZXRQcm9maWxlIENBggkA0myxg7KDeeEwEwYDVR0lBAwwCgYIKwYBBQUHAwEwCwYDVR0PBAQDAgWgMA0GCSqGSIb3DQEBCwUAA4ICAQC9WZuYgQedSuOc5TOUSrRigMw4/+wuC5EtZBfvdl4HT/8vzMW/oUlIP4YCvA0XKyBaCJ2iX+ZCDKoPfiYXiaSiH+HxAPV6J79vvouxKrWg2XV6ShFtPLP+0gPdGq3x9R3+kJbmAm8w+FOdlWqAfJrLvpzMGNeDU14YGXiZ9bVzmIQbwrBA+c/F4tlK/DV07dsNExihqFoibnqDiVNTGombaU2dDup2gwKdL81ua8EIcGNExHe82kjF4zwfadHk3bQVvbfdAwxcDy4xBjs3L4raPLU3yenSzr/OEur1+jfOxnQSmEcMXKXgrAQ9U55gwjcOFKrgOxEdek/Sk1VfOjvS+nuM4eyEruFMfaZHzoQiuw4IqgGc45ohFH0UUyjYcuFxxDSU9lMCv8qdHKm+wnPRb0l9l5vXsCBDuhAGYD6ss+Ga+aDY6f/qXZuUCEUOH3QUNbbCUlviSz6+GiRnt1kA9N2Qachl+2yBfaqUqr8h7Z2gsx5LcIf5kYNsqJ0GavXTVyWh7PYiKX4bs354ZQLUwwa/cG++2+wNWP+HtBhVxMRNTdVhSm38AknZlD+PTAsWGu9GyLmhti2EnVwGybSD2Dxmhxk3IPCkhKAK+pl0eWYGZWG3tJ9mZ7SowcXLWDFAk0lRJnKGFMTggrWjV8GYpw5bq23VmIqqDLgkNzuoog==

2017.1.4

2017.1.4 - Сервер лицензий

2017.1.4 - Сервер лицензий

  • http://idea.imsxm.com/ - (Пока работает)
  • http://roothat.ru:1017 - (не работает)
  • Откройте активационное окно Select Help → Register…
  • Выберите пункт server license
  • Наслаждайтесь

2017.3.1

2017.3.1 - Сервер лицензий

2017.3.1 - Сервер лицензий

2017.3.2

2017.3.2 - Сервер лицензий

2017.3.2 - Сервер лицензий

  • Откройте активационное окно Select Help → Register…
  • Выберите пункт server license
  • Наслаждайтесь

from 2018.3 license server

2018.3 - 2019.1

2018.3 - 2019.1

MySql - [Клиенты / Утилиты]

$
0
0

MySql

Установка

MariaDB 10:

$ apt-get install libmariadbclient18 libmysqlclient18 mariadb-client mariadb-client-10.0 mariadb-client-core-10.0 mariadb-common  mariadb-server

Percona 5.6:

$ install percona-server-common-5.6 percona-server-server percona-server-client

Инициализация

dpkg-reconfigure mysql-server-5.1 - запуск настройки
mysql_upgrade -u root -p --force - ремонт баз данных
mysqlcheck -uroot -p --auto-repair --check --optimize --all-databases - ремонт баз данных

mysql_install_db - создание mysql database
mysql_install_db --rpm --user=mysql
mysql_install_db --defaults-file=/etc/mysql/my.cnf
mysql_install_db --no-defaults --basedir=/usr --datadir=/var/lib/mysql
mysql_install_db --defaults-file=/etc/mysql/my.cnf --force --basedir=/usr --datadir=/var/lib/mysql --user=mysql

Настройка, оптимизация и обслуживание

Описание движков и их особенностей

Клиенты / Утилиты

Ссылки / Документация / Примеры

Примеры

Ссылки / Документация

Dump / Restore - [Dump]

$
0
0

Dump / Restore

Dump

$ mysqldump -u[uname] -p[pass]> mysql.sql
$ mysqldump -u[uname] -p[pass][dbname]|gzip-9> backupfile.sql.gz
$ mysqldump --hex-blob-A> all_databases.sql
$ mysqldump --all-databases -u[uname] -p[pass]> dump.sql
$ mysqldump --host=localhost --user=root --password=password --opt--skip-dump-date--skip-extended-insert--database database_name >/tmp/mydatabase.sql
$ mysqldump --all-databases -u[uname] -p[pass]--default-character-set=cp1251 > dump.sql
$ mysqldump --routines--add-drop-table--disable-keys--extended-insert--events-v--host=127.0.0.1 --port=3306-p-u root skringo > dump.sql
  • --routines
  • --add-drop-table
  • --disable-keys
  • --extended-insert
  • --events
  • -v
  • --host=127.0.0.1
  • --port=3306
  • -p
  • -u
  • --column-statistics=0 - отключентие статистики при дампе и исправление ошибки с (mysqldump: Couldn't execute 'SELECT COLUMN_NAME, JSON_EXTRACT(HISTOGRAM, '$."number-of-buckets-specified"') Unknown table 'COLUMN_STATISTICS' in information_schema (1109))

Ключи

  • --default-character-set=cp1251 - Указание кодировки при експорте

С упаковкой

$ mysqldump --user=root --password=password database_name |gzip> dump.sql.gz

Restore

$ mysql -u[uname] -p[pass] database_name < file_name.sql
$ gunzip-c/path/backup.Sql.Gz | mysql -h -u[uname] -p[pass]
$ gunzip<[backupfile.sql.gz]| mysql -u[uname] -p[pass][dbname]
$ /usr/bin/gunzip< database.gz database.sql
$ mysql -u[uname] -p[pass] database_name < database.sql
$ mysql -u[user]-p database_name < database.sql
$ mysql>source/path/to/database.sql
$ mysql -u[user]-p--default-character-set=cp1251 database_name < database.sql

Ключи

  • --default-character-set=cp1251 - Указание кодировки при импорте

С распаковкой

$ zcat ./dump.sql.gz | mysql -u'root'-p database_name
$ gunzip< ./dump.sql.gz | mysql -u root -p database_name
$ gunzip-c ./dump.sql.gz | mysql -u root -p database_name
$ gunzip ./dump.sql.gz

Из оболочки MySql

$ mysql> create database database_name;
$ mysql> \!(zcat  database_name.sql.gz > database_name.sql &)
$ mysql>source database_name.sql

Утилиты

Node.JS - [Debian]

$
0
0

Node.JS

Установка nodejs + npm

$ npm install will install both "dependencies" and "devDependencies"
$ npm install--production will only install"dependencies"
$ npm install--dev will only install"devDependencies"

Debian

Пакетный менеджер npm

с репозитория

Исправление ошибок

  • installing from npm fails
npm config set registry http://registry.npmjs.org/

Демонизируем Node.Js / Forever

forever - модуль разработанный nodejitsu, - нужен для того, чтобы запускать приложения в виде демона (режиме постоянного выполнения - отсюда и название модуля). Если приложение по каким-то причинам прекращает свое выполнение, то forever его перезапускает. Также, данный модуль имеет API, так что вы можете использовать его в коде своих проектов.

forver может быть установлен при помощи npm:

sudo npm -g install forever

Отладка

Документация

Библиотеки

Парсинг / Web console (webkit)

Статьи

Видео

Ссылки

Проекты

Elasticsearch - поисковая система - [Elasticsearch - поисковая система]

$
0
0

Elasticsearch - поисковая система

Документация

Установка

Установка и настройка Elasticsearch

  • Установите максимальный размер открытых дескрипторов файла для пользователя от 32k до 64k

nano /etc/sysctl.conf

vm.max_map_count = 262144
  • Если возможно, отключите свопинг памяти для процессов Elasticsearch. Обратите внимание, что в виртуальных средах это может привести к неожиданным результатам.
  • Установите значение -Xms равным -Xmx (то же самое что установить значение переменной среды ES_HEAP_SIZE).
  • Оставьте некоторое количество памяти, чтобы кеш операционной системы мог использовать его для Lucene.
Elasticsearch JVM не должен занимать больше половины всего объема памяти.

nano /etc/elasticsearch/jvm.options

-Xms2g
-Xmx2g

Проверка работоспособности сервера

$ curl -XGET http://localhost:9200/_stats/?pretty
$ curl -XGET http://localhost:9200/_nodes/?pretty
$ curl --silent-XGET"http://localhost:9200/_snapshot/_all"
$ curl --silent-XGET"http://localhost:9200/_cat/nodes?pretty"
mbp-mirocow 192.168.1.147 11786.88 d * Mirocow

Статьи / Документация / Примеры индексов / Примеры запросов

Документация

Уроки

Статьи / Дискуссии

Индексы

Запросы

Примеры

Библиотеки

Расширения для Frameworks

Yii2 framework
PHP

Программное обеспечение

Viewing all 1318 articles
Browse latest View live