Здравствуйте, я новичок в yii. Начал писать свой первый проект  с минимальным ТЗ. Как и водится, в процессе ТЗ раздулось. В итоге получил четыре очень похожих метода:
"Индексный" метод
public function actionIndex(){
        $sort = new Sort([
            'attributes' => [
                'number' => [
                    'asc' => ['number' => SORT_ASC],
                    'desc' => ['number' => SORT_DESC],
                    'default' => SORT_ASC,
                    'label' => 'По номеру',
                ],
                'date' => [
                    'asc' => ['date' => SORT_ASC],
                    'desc' => ['date' => SORT_DESC],
                    'default' => SORT_ASC,
                    'label' => 'По дате',
                ],
            ],
        ]);
        $stat = Yii::$app->request->get('stat');
        if (!$stat){
            $stat='0';
        }
        $session = Yii::$app->session;
        $pageSize = Yii::$app->request->get('pagesize');
        if($pageSize){
            $session['pageSize'] = $pageSize;
        }
        $users = User::find()->all();
        $query = Projects::find()->where(['status'=>$stat])->with(['materials','design','installing','building'])->orderBy($sort->orders);
        $countQuery = clone $query;
        $pages = new Pagination([
            'totalCount'=>$countQuery->count(),
            'pageSize'=>$session['pageSize'],
            'forcePageParam'=>false,
            'pageSizeParam'=>false,
            'defaultPageSize'=>10]);
        $status = $query->offset($pages->offset)
            ->limit($pages->limit)
            ->all();
        return $this->render('index', [
            'status' => $status,
            'pages'=>$pages,
            'users'=>$users,
            'sort' => $sort
        ]);
    }
Метод для поиска:
public function actionSearch(){
        $sort = new Sort([
            'attributes' => [
                'number' => [
                    'asc' => ['number' => SORT_ASC],
                    'desc' => ['number' => SORT_DESC],
                    'default' => SORT_ASC,
                    'label' => 'По номеру',
                ],
                'date' => [
                    'asc' => ['date' => SORT_ASC],
                    'desc' => ['date' => SORT_DESC],
                    'default' => SORT_ASC,
                    'label' => 'По дате',
                ],
            ],
        ]);
        $stat = Yii::$app->request->get('stat');
        if (!$stat){
            $stat='0';
        }
        $session = Yii::$app->session;
        $pageSize = Yii::$app->request->get('pagesize');
        if($pageSize){
            $session['pageSize'] = $pageSize;
        }
        $users = User::find()->all();
        $search = Yii::$app->request->get('search');
        $query = Projects::find()
            ->Where(['status'=>$stat])
            ->joinWith('materials')
            ->andWhere([
                'or',
                ['like','materials.number',$search],
                ['like','materials.description',$search],
                ['like','projects.number',$search]
            ])
            ->with(['materials','design','installing','building'])
            ->distinct()
            ->orderBy($sort->orders);
        /*$countQuery = clone $query;*/
        $pages = new Pagination(['totalCount'=>$query->count(),'pageSize'=>$session['pageSize'],'forcePageParam'=>false,'pageSizeParam'=>false,'defaultPageSize'=>10]);
        $status = $query->offset($pages->offset)
            ->limit($pages->limit)
            ->all();
        return $this->render('index', [
            'status' => $status,
            'pages'=>$pages,
            'users'=>$users,
            'search'=>$search,
            'sort'=>$sort
        ]);
    }
Собственно, идеологию разделения методов по поиску черпнул из модуля CRUD. Но, во-первых, получилось очень много копипаста. 
А во-вторых, есть проблема с вызовом этих методов из view. 
Отсюда два вопроса:
1.
 Как объединить эти методы?
2. В случае, если не объединять методы.
Для сортировки используется вот такая конструкция:
$sort = new Sort([
            'attributes' => [
                'number' => [
                    'asc' => ['number' => SORT_ASC],
                    'desc' => ['number' => SORT_DESC],
                    'default' => SORT_ASC,
                    'label' => 'По номеру',
                ],
                'date' => [
                    'asc' => ['date' => SORT_ASC],
                    'desc' => ['date' => SORT_DESC],
                    'default' => SORT_ASC,
                    'label' => 'По дате',
                ],
            ],
        ]);
А во view всего-то достаточно 
<?php echo $sort->link('number')?> и эта ссылка будет работать для всех методов. 
Как такую же конструкцию сделать для пагинации? Дело в том, что Pagination() не имеет в себе attributes.