Code verkorten | Hulp

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

- Rob -

- Rob -

04/01/2020 12:12:45
Quote Anchor link
Hallo PHP hulpers,

Ik ben momenteel bezig met een script om pagina's weer te laten geven. Mijn code is als volgt:

Page class
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
<?php
    namespace src\Handlers\Page;
    use src\Handlers\User as Handlers;

    class Page {
        public static $requestedPage;
        public static $viewPath;

        public static function getPage($uri) {
            $path = explode('/', $uri);
            $lengthAssetUrl = count(explode('/', APP['asset_url']));

            if (Handlers\User::isLoggedIn() === true) {
                self::$requestedPage = $path[$lengthAssetUrl+1];
                self::$viewPath = __BASE__.'/resources/views/panel/';
            }
else {
                self::$requestedPage = $path[$lengthAssetUrl];
                self::$viewPath = __BASE__.'/resources/views/landing/';
            }
        }


        public static function showPage() {
            switch(self::$requestedPage) {
                case
LANG['login']:
                    self::checkPath(self::$viewPath.'login.php');
                    break;
                case
LANG['register']:
                    include self::$viewPath.'register.php';
                    break;
                case
LANG['passforgot']:
                    include self::$viewPath.'passforgot.php';
                    break;
                default:

                    self::errorPages('404');
                    break;
            }
        }


        public static function checkPath($path) {
            if (file_exists($path)) {
                if (Handlers\User::permissionForPage(null, self::$requestedPage) === true) {
                    include $path;
                }
else {
                    self::errorPages('101');
                }
            }
else {
                self::errorPages('404');
            }
        }


        public static function errorPages($error) {
            switch($error) {
                case
'404':
                    include __BASE__.'/resources/views/error/404.php';
                    break;
                case
'101':
                    include __BASE__.'/resources/views/error/101.php';
                    break;
            }
        }
    }

?>


User class (provisorisch)
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?php
    namespace src\Handlers\User;

    class User {

        public static function isLoggedIn() {
            if(isset($_SESSION['id'])) {
                return true;
            }
else {
                return false;
            }
        }


        public static function permissionForPage($userId, $page) {
            if ($userId === null) {
                switch($page) {
                    case
LANG['login']:
                        return true;
                        break;
                    case
LANG['register']:
                        return true;
                        break;
                    case
LANG['passforgot']:
                        return true;
                        break;
                    default:

                        return false;
                        break;
                }
            }
        }
    }

?>


Index
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
    include 'bin/panelr.php';

    use src\Handlers\Page as Handlers;

    Handlers\Page::getPage($uri);
    Handlers\Page::showPage();
?>


Zoals te zien is in de code hierboven gebruik ik voor elke pagina een case en in die case controleer ik of de pagina bestaat en of de gebruiker toegang heeft tot die pagina. Nu zijn het nog maar drie pagina's dus die switch case is niet al te lang. Maar als ik straks 20+ pagina's heb, loopt het erg op. Ik heb mijn brein er even over laten breken maar ik zie het zo 1,2,3 niet hoe ik ervoor kan zorgen dat de code niet zo ultiem lang wordt door een pagina toe te voegen. De urls van de website verschillen per taal, deze worden vastgesteld in het vertaalbestand die LANG defined.

Een voorbeeld van een $uri is als volgt: /panelr/login Hier moet dus de login pagina worden weergegeven en gecontroleerd worden of de gebruiker deze pagina mag zien. Maar $uri kan ook zo zijn: /panelr/inloggen (vandaar dus LANG['login']).

Graag zou ik jullie visie hierop willen. Alvast bedankt voor de moeite!
 
PHP hulp

PHP hulp

21/01/2021 14:52:47
 
Rob Doemaarwat

Rob Doemaarwat

04/01/2020 12:33:33
Quote Anchor link
1) Volgens mij moet je User::permissionForPage() gewoon in de Page class plaatsen (het heeft meer met Page te maken, dan met User). Misschien ga je in de toekomst nog een specifiek recht controleren: dat doe je dan in de User class, maar de combinatie met de pagina zou ik in de Page class houden.

2) Als je zo consequent werkt (de "login" pagina heet in de $LANG "login", het script bestand heet dan "login.php", en het recht heet ook weer "login"), dan zou ik in de Page gewoon een lijstje (array) met toegestane pagina's maken (en evt. wat opties, bijvoorbeeld of je wel/niet de permission moet checken). Dan wordt het:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php

  public $pages = ['login','register','passforgot']; //enz

  public static function showPage() {
    foreach($this->pages as $page) if($page == self::$requestedPage){
      self::checkPath(self::$viewPath . $page . '.php');
      return;
    }

    self::errorPages('404'); //alleen indien geen matchende pagina
  }

?>
Gewijzigd op 04/01/2020 12:34:26 door Rob Doemaarwat
 
- Rob -

- Rob -

04/01/2020 12:46:27
Quote Anchor link
Dankjewel Rob Doemaarwat! Enige fout is dat $this->pages self::$pages moet zijn en public $pages public static $pages, anders krijg je een error ;) Hier kan ik in ieder geval mee vooruit, nogmaals bedankt!
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.