• Как правильно работать с elasticsearch в Yii2 через ActiveRecord?

    sokolnikov
    @sokolnikov Автор вопроса
    Всё оказалось просто.
    Забыл в модели:

    public function rules()
        {
            return [
                ['name', 'required']
            ];
        }
    Ответ написан
  • Post и Get запросы, какая между ними разница и что лучше и для каких целей?

    socengel
    @socengel
    7 лет native php в продакшене, онлайн 20000+,
    Общего между ними то что они работают одинаково. Разницы между ними технически никакой. А вот идеологические различия есть.

    Я расскажу о них в контексте PHP. Прошу заметить что протокол HTTP к PHP имеет косвенное отношение потому что он создавался для обмена html страницами а PHP просто расширяет возможности и того и другого.

    GET запрос используется чтобы получить данные а POST чтобы отправить. (Напоминаю что технически они работают одинаково).

    Поэтому в контексте PHP опираясь на эту идеологию сделали следующим образом:
    1. При каждом запуске PHP по умолчанию создаются суперглобальные массивы ($_GET, $_POST).
    2. Если в строке запроса есть вопросительный знак(?). То все что после него считается параметрами GET запроса они представлены в формате 'ключ'='значение' и в качестве разделителя используется знак амперсанда (&)
    Пример:
    GET /index.php?name=Андрей&surname=Галкин
    это строка запроса, тут 2 параметра. эти параметры попадут в массив $_GET.
    3. $_POST заполняется другим способом. содержимое этого массива заполняется из "заголовков запроса". То есть из места, скрытого от глаз в явном виде. Всю рутину по созданию таких заголовков берет на себя браузер. Хотя иногда и что-то редактируется в заголовках в ручную.

    Чаще всего пост запрос используется в формах (для отправки данных).

    Например у нас есть форма для входа 2 поля логин и пароль.

    Представим что мы используем GET метод. Тогда при отправке формы мы перейдем на следующий адрес /login.php?login=Андрей&password=123 согласитесь что так передавать такую информацию совсем не безопасно. Любой может открыть ваш браузер и начиная вводить адрес сайта он из истории может увидеть ваши пароли и логины.

    А вот если бы мы указали методом POST то мы бы получили следующий запрос:
    POST /login.php (login=Андрей&password=123) то что в скобочках было бы скрыто и никак не сохранено в браузере.

    Теперь другая ситуация например форма поиска. Мы вводим текст и получаем страницу с результатами. Вот тут уместнее GET форма. потому что нам было бы удобно сразу иметь ссылку на результат поиска, то есть добавить в строку запроса можно выразится "Публичные параметры", которыми можно поделиться. И как результат в строке браузера будет конкретная ссылка на текущую страницу. Мы можем ее скопировать, и разместить где-нибудь, или например скинуть другу. И получить при переходе одну и ту же страницу. А не просить других людей зайти на сайт и в поиск вбить определенную фразу чтобы получить необходимую страницу.

    В общем подводя итог:
    GET - это чтобы получить определенную страницу в определенном виде ( сортировка, текущая страница в блоге, строка поиска и т.п. ).
    POST - для оправки данных которые не влияют на отображение страницы, в том плане что эти данные влияют только на результат выполнения скрипта ( логины, пароли, номера кредиток, сообщения и т.п. ).

    И еще одна хорошая новость их можно комбинировать, например
    POST /index.php?page=login (login=Андрей&password=123) Думаю я уже достаточно объяснил что из этого получится и какие параметры в какой массив попадут.
    Ответ написан
  • Почему composer не обновляет yii2?

    mannaro
    @mannaro
    Умею профессионально гуглить
    Удалите composer.lock и папку vendor.
    Затем выполните composer install
    Ответ написан
  • Как прикрутить Gettext к шаблонам Twig в YII2?

    @matperez Автор вопроса
    По аналогии с Silex проксировал запрос на перевод к системному \Yii::t, который умеет корректно подгружать файлы с перводами. В итоге получилось такое расширение
    namespace app\components;
    
    use Twig_Extension;
    use Twig_Extensions_TokenParser_Trans;
    use Twig_SimpleFilter;
    
    class Twig_I18n_Extension extends Twig_Extension {
    
    	/**
    	 * Translation message context
    	 * @var string
    	 */
    	public $category = 'app';
    
    	/**
    	 * Returns the token parser instances to add to the existing list.
    	 *
    	 * @return array An array of Twig_TokenParserInterface or Twig_TokenParserBrokerInterface instances
    	 */
    	public function getTokenParsers()
    	{
    		return array(new Twig_Extensions_TokenParser_Trans());
    	}
    
    	/**
    	 * {@inheritdoc}
    	 */
    	public function getFilters()
    	{
    		return array(
    			new \Twig_SimpleFilter('trans', array($this, 'trans')),
    		);
    	}
    
    
    	/**
    	 * @param string $category the message category.
    	 * @param string $message the message to be translated.
    	 * @param array $arguments
    	 * @param string $language the language code (e.g. `en-US`, `en`). If this is null, the current
    	 * [[\yii\base\Application::language|application language]] will be used.
    	 * @return string
    	 */
    	public function trans($message, array $arguments = [], $category = null, $language = null)
    	{
    		if (!$category) {
    			$category = $this->category;
    		}
    		return \Yii::t($category, $message, $arguments, $language);
    	}
    
    	/**
    	 * Returns the name of the extension.
    	 *
    	 * @return string The extension name
    	 */
    	public function getName()
    	{
    		return 'i18n';
    	}
    }


    Настройка рендера стала вот такой:
    'view' => [
    		    'renderers' => [
    			    'twig' => [
    				    'class' => 'yii\twig\ViewRenderer',
    				    'extensions' => [
    					    'app\components\Twig_I18n_Extension'
    				    ],
    			    ],
    		    ],
    	    ],
    Ответ написан
  • Как получить email через API ВКонтакте?

    Jeket
    @Jeket Автор вопроса
    Краткий алгоритм действий:
    1) Регистрируешь приложение в ВКонтакте
    2) Формируешь ссылку как в документации API https://vk.com/dev/auth_sites (если нужен email, то указываешь &scope=email )
    3) После получения кода делаешь запрос на получение access_token, в ответе приходит id и email пользователя
    Ответ написан
  • Как организовать большое количество зависимостей в RequireJS?

    blo
    @blo
    инженер-программист
    Ваш пример из документации, там же описано как сделать его чуть более читабельным

    define(['require', 'dependency1', 'dependency2'], function (require) {
        var dependency1 = require('dependency1'),
            dependency2 = require('dependency2');
    
        return function () {};
    });
    
    Ответ написан