View difference between Paste ID: EfzYwAEH and BJjPFxBx
SHOW: | | - or go back to the newest paste.
1
<?php
2
/**
3
 * Created by PhpStorm.
4
 * User: hlogeon
5
 * Date: 13.08.14
6
 * Time: 12:33
7
 *
8
 * @author Degtyaruk Andrey <hlogeon1@gmail.com>
9
 *
10-
 * На своей основной работе я занимаюсь разработкой на Zend Framework\Zend Framework 2,
10+
 * The way most developers do even in huge projects!
11-
 * но я не очень  люблю Zend из-за его "академичности", описание множества вещей занимает куда
11+
12-
 * больше времени и строк кода, чем в других фреймворках. Однако, его академичность является для меня и плюсом,
12+
13-
 * ведь сам фреймворк, при правильном к нему подходе подталкивает использовать лучшие практики. При том,
13+
14-
 * как показывает опыт, довольно большая часть программистов на других фреймворках мало знакома даже с
14+
15-
 * базовыми концепциями инструментов, с которыми они работают и иногда не способны принимать, казалось бы очевидные,
15+
16-
 * но качественные архитектурные решения из-за привычки к тому, что фреймворк все делает за них.
16+
17-
 * Здесь я хочу привести пример, с которым я сталкивался, работая в довольно крупной компании.
17+
18-
 * Есть замечательный, на мой взгляд фреймворк - Yii Framework, который не только берет на
18+
19-
 * себя намного больше ответственности "из коробки", чем Zend, но и предоставляет довольно качественные и
19+
20-
 * гибкие интерфейсы для более тонкой настройки. А язык PHP, являясь очень гибким дополняет эту замечательную картину.
20+
21-
 * К сожалению, даже в крупных компаниях, где, казалось бы слова абстракция, принципы ООП, архитектура не должны являться пустым звуком, не используют эти возможности.
21+
        // At first create filter from input data
22-
 * Для того, чтобы отобразить то, что делаю я и как это работает во многих других приложениях потребуется описать несколько
22+
23-
 * файлов, но для удобства я объединю каждое решение в 1 файл и добавлю дополнительные комментарии
23+
24-
 * на русском языке(в коде не пишу на русском, так будет видно, где пояснительные комментарии, а где те, которые были написаны при разработке)
24+
25
        if($data = $this->getFilterData($filter))
26-
 * Этот файл описывает "стандартное" решение
26+
27
        $filter->search(); // Search
28
29-
 * Да, на первый взгляд оно намного проще и короче. А теперь представим, что у нас есть еще:
29+
        $criteria = new EMongoCriteria(); // describe all criteria we need
30-
 * действия отображения
30+
        // Now set criteria
31-
 * действия редактирования\созданий
31+
32-
 * действия вывода загрузки изображений(например в пользоваетеле, альбоме, компании и так даллее)
32+
        // Create data provider
33-
 * действие добавления отзыва
33+
34-
 * и так далее, реализуемые снова и снова в каждом из контроллеров из раза в раз. Да, на помощь может придходит стандартное наследование,
34+
            //describe data provider config
35-
 * или, что по моему больше подходит в данной ситуации - трейты. Но это не избавит от необходимости писать код.
35+
36-
 * В случае с решением, которое я представил такая необходимость возникает только единожды, даже ничего расширять и переопределять не надо.
36+
37
        $dataProvider = new EMongoDocumentDataProvider($filter, $dataProviderConfig);
38
39
        // Set scenario for models
40
        $this->setScenario($dataProvider->getData(), 'list');
41
42
        // And finally render
43
        $this->render('list', array(
44
            'dataProvider' => $dataProvider,
45
            'filter' => $filter,
46
        ));
47-
        // Первым делом создадим фильтр и установим параметры фильтрации из входных данных
47+
48
    }
49
50
51
    protected function getFilterData()
52
    {
53-
        $filter->search(); // Этот метод для того, чтобы критерия модели фильтра стала выбирать по установленным в модели атрибутам
53+
        //filtration
54
    }
55-
        $criteria = new EMongoCriteria(); // описываем все критерии, которые нам нужны
55+
56-
        // Теперь установим критерию фильтра
56+
57
    {
58-
        // Теперь создадим дата провайдер. Дата провайдер из расширения yiimongodbsuite может брать критерию из
58+
        //Setting scenarios
59-
        // переданной ему модели (в нашем случае - фильтра)
59+
60
61-
            //Здесь описывем нужную конфигурацию провайдера
61+
62
}