RenderController::renderPage()   A
last analyzed

Complexity

Conditions 3
Paths 4

Size

Total Lines 13

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 12

Importance

Changes 0
Metric Value
dl 0
loc 13
ccs 0
cts 12
cp 0
rs 9.8333
c 0
b 0
f 0
cc 3
nc 4
nop 2
crap 12
1
<?php
2
/**
3
 * Yii2 Pages Module
4
 *
5
 * @link      https://github.com/hiqdev/yii2-module-pages
6
 * @package   yii2-module-pages
7
 * @license   BSD-3-Clause
8
 * @copyright Copyright (c) 2016-2017, HiQDev (http://hiqdev.com/)
9
 */
10
11
namespace hiqdev\yii2\modules\pages\controllers;
12
13
use hiqdev\yii2\modules\pages\models\AbstractPage;
14
use Yii;
15
use yii\helpers\Html;
16
use yii\web\NotFoundHttpException;
17
18
19
class RenderController extends \yii\web\Controller
20
{
21
    public function getViewPath()
22
    {
23
        return dirname(__DIR__) . '/views/render';
24
    }
25
26
    /**
27
     * Index action.
28
     * @param string|null $page
29
     * @return string rendered page
30
     * @throws NotFoundHttpException
31
     * @throws \yii\base\InvalidConfigException
32
     */
33
    public function actionIndex(string $page = null): string
34
    {
35
        if (!$page) {
0 ignored issues
show
Bug Best Practice introduced by
The expression $page of type null|string is loosely compared to false; this is ambiguous if the string can be empty. You might want to explicitly use === null instead.

In PHP, under loose comparison (like ==, or !=, or switch conditions), values of different types might be equal.

For string values, the empty string '' is a special case, in particular the following results might be unexpected:

''   == false // true
''   == null  // true
'ab' == false // false
'ab' == null  // false

// It is often better to use strict comparison
'' === false // false
'' === null  // false
Loading history...
36
            $page = $this->getPageName();
37
        }
38
39
        $page = $this->module->find($page);
40
41
        if ($page === null) {
42
            throw new NotFoundHttpException(Yii::t('yii', 'Page not found.'));
43
        }
44
45
        return $this->renderPage($page);
46
    }
47
48
    /**
49
     * @return string
50
     * @throws \yii\base\InvalidConfigException
51
     */
52
    private function getPageName(): string
53
    {
54
        preg_match('/^.+pages\/(?<pageName>.+)$/', Yii::$app->request->getUrl(), $matches);
55
56
        return trim($matches['pageName'], '/') ?: 'index';
57
    }
58
59
    /**
60
     * @param AbstractPage $page
61
     * @param array $params
62
     * @return string
63
     */
64
    private function renderPage(AbstractPage $page, array $params = []): string
65
    {
66
        if ($page->layout) {
67
            $this->layout = $page->layout;
68
        }
69
        if ($page->title) {
70
            $this->view->title = Html::encode($page->title);
71
        }
72
        $this->view->params = $page->getData();
73
        $params['controller'] = $this;
74
75
        return $this->renderContent($page->render($params));
76
    }
77
78
    /**
79
     * @param string|null $listName
80
     * @return string
81
     */
82
    public function actionList(string $listName = null): string
83
    {
84
        $list = $this->module->findList($listName);
85
86
        return $this->render('index', ['dataProvider' => $list->getDataProvider()]);
87
    }
88
}
89