использование curl в yii2

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

Экстеншен можно взять здесь http://www.yiiframework.com/extension/yii2-curl/

В принципе в документации и так всё доступно и понятно, но всё же я повторюсь.

Установка осуществляется полностью из composer

Достаточно набрать команду

root@kostiahome:/var/www/wap/www# composer  require   --prefer-dist "linslin/yii2-curl:*"

Сразу хочу упомянуть, что composer у меня как встроенная команда и запускается из любого места.

После в контролёр или в модель необходимо прописать подключение нэймспейса curl после строчки namespase

use linslin\yii2\curl;

Метод будет выглядеть так

    
       public function actionCurl($value =0)
       {
           $url = 'http://yandex.ru/search/';
        $curl = new curl\Curl();
        //post http://example.com/, reset request before
        $response = $curl->reset()->setOption(
                CURLOPT_POSTFIELDS,
                http_build_query(array(
                    'text' => $value
                )
            ))->post($url);
            return $curl->response;
       }

 

Работа в консоли в yii2

В yii2 реализована очень удобная возможность разделение среды работы на консоль и среду которая обрабатывается через запрос в браузере.

Для этого в yii2 есть специальный раздел который так и называется console находящийся в папке /console/. По файловой структуре раздел ни чем не отличается от frontend или backend. На самом деле их можно наплодить любое количество, для удобства developer(а).

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

root@kostiahome:/var/www/wap/www# ./yii

This is Yii version 2.0.3.

The following commands are available:

- asset     Allows you to combine and compress your JavaScript and CSS files.
- cache     Allows you to flush cache.
- fixture   Manages fixture data loading and unloading.
- getlib    
- gii       This is the command line version of Gii - a code generator.
- help      Provides help information about console commands.
- message   Extracts messages to be translated from source files.
- migrate   Manages application migrations.

To see the help of each command, enter:

  yii help <command-name>

Для реализации определённого контроллера необходимо его создать файл в папке controllers

Я для примера создал файл GetlibController.php с содержанием

<?php
namespace console\controllers;

class  GetlibController extends \yii\console\Controller {

    public function actionIndex() {
        echo "Index \n";
    }
    
       public function actionTest() {
        echo "Test\n";
    }

}

Теперь можно вызывать метод контролёра yii2 из консоли по примеру

root@kostiahome:/var/www/wap/www# ls -alh console/controllers
total 12K
drwxrwxrwx 2 root   root   4,0K мая   10 12:31 .
drwxrwxrwx 7 root   root   4,0K марта  1 09:22 ..
-rw-rw-r-- 1 kostia kostia  239 мая   10 13:06 GetlibController.php
-rwxrwxrwx 1 root   root      0 марта  1 09:22 .gitkeep
root@kostiahome:/var/www/wap/www# ./yii getlib/test
Test
root@kostiahome:/var/www/wap/www#

 

Отключение bootstrap шаблона в yii2

Делаю проект wap сайт в котором нет необходимости использовать bootstrap стили и скрипты. Быстрый поиск не дал результатов что необходимо сделать для быстрого отключения.

Решение на самом деле простое. В конфигурационный файл mail.php и в локальный файл main-local.php необходимо добавить такие строчки.

# 
'assetManager' => [
                'bundles' => [
                    'yii\bootstrap\BootstrapAsset' => [
                        'css' => [],
                    ],
                      'yii\bootstrap\BootstrapPluginAsset' => [
                        'js'=>[]
                    ],
                     'yii\web\JqueryAsset' => [
                        'js'=>[]
                    ],
                
                ],
                
            ],

#

Всё это надо добавить в components.

Стоит заметить что здесь так же отключается Jquery, строчкой

#
   'yii\web\JqueryAsset' => [
                        'js'=>[]
                    ],
#

Если нет необходимости отключать jquery, то просто этот параметр стоит убрать из кода.

Для тех кто не знаком с фреймворком плотно, main-local.php – этот файл исполняется при локальной работе сайта, main.php на сервере. Локально подключаются вроде как оба файла, сейчас уже и не вспомню, локальный перекрывает глобальный(перезаписывает).

Планирование интернет портала

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

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

Кто ваша аудитория?

Определение для кого вы делаете проект, это достаточно обширная тема и рассматривать её должны маркетологи, топ-менеджеры, инвесторы …

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

Проект разделён на несколько этапов.

 

  • Планирование
  • Составление блок схем взаимодействия модулей и интерфейсов.
  • Планирование базы данных.
  • Согласование технологий на которых будет реализован проект.
  • Реализация проекта(backend)
  • Прототипирование frontendа
  • Реализация концепции дизайна.

Далее я вернусь к описанию пунктов.

 

Интерфейс взаимодействия модулей(1)

 

История продаж, задачи на собеседовании по sql

Я Очень люблю язык sql и когда мне дают задачку я в душе радуюсь. Одна из причин, это развитие. К каждой задаче можно подойти творчески и решить её многочисленными методами.

История продаж

Имеем таблицу “sales_history”:

CREATE TABLE `sales_history` (
`order_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`manager_id` int(10) unsigned NOT NULL,
`amount` int(10) unsigned NOT NULL DEFAULT '0',
`order_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`order_id`),
KEY `manager_id` (`manager_id`)
) ENGINE=InnoDB;

в которую после каждой продажи заносится информация о заказе: id менеджера , сумма заказа (amount) , дата заказа.

Выбрать список сотрудников, у которых средняя стоимость заказов за последние 3 месяца выше, чем общая средняя стоимость заказов за последние 3 месяца.

Ответ:

SELECT `manager_id`, avg(`amount`)
FROM `sales_history`
WHERE `order_date`
BETWEEN DATE_SUB(NOW() , INTERVAL 3
MONTH)
AND NOW() GROUP BY `manager_id` HAVING avg(`amount`) > (SELECT avg( `amount` ) FROM `sales_history` 
WHERE `order_date` BETWEEN DATE_SUB(NOW() , INTERVAL 3
MONTH)
AND NOW());

 

Удачи.

Числа с плавающей точкой в php

Недавно один из коллег показал мне пример

  $result = (int)(0.1+0.7)*10;

С первого вгляда код достаточно стандартный и здесь не видно ничего необычного, но в коде прослеживается хитрость. Хитрось заключается в способе хранения данных в памяти дл переменных типа FLOAT.

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

На что может повлиять данный код?

Ну например при планировании биллинга или сложных метрических систем.

 

Лень программиста

Программисты, люди ленивые.

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

Первая запись

Здравствуйте,

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

Если кому-то поможет данный блог в решении проблем, то я буду только рад

<?php
echo "Добро пожаловать";