Code verkorten | Hulp
Ik ben momenteel bezig met een script om pagina's weer te laten geven. Mijn code is als volgt:
Page class
Code (php)
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
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;
}
}
}
?>
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)
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
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;
}
}
}
}
?>
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)
1
2
3
4
5
6
7
8
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();
?>
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!
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)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
Gewijzigd op 04/01/2020 12:34:26 door Rob Doemaarwat
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!