Autloaden van classes
Heelijk in het zonnetje ben ik weer eens wat gaan scripten.
Beetje autoloaden, namespaces gebruiken en consorten.
Ik heb:
- routes die werken, (onder de noemer een luie scripter niet zelf gemaakt: https://steampixel.de/en/simple-and-elegant-url-routing-with-php/)
- een script dat autoload (werkt ook, althans bij een deel daarvan)
Nu wil ik het volgende bereiken, in de map framework heb ik een class page.
Wat het moet doen is uit de map "app/pages" bijvoorbeeld home.php aanroepen en vervolgens wat gaan doen
Mijn eerste opzet:
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
// /app/framework/page.php
namespace framework;
class page
{
public static function render($page, $method, $options='')
{
// deze wil ik weg hebben
//include $_SERVER['DOCUMENT_ROOT'].'/app/pages/'.$page.'.php';
$class = new $page;
if(trim($options != ''))
{
$class->$method($options);
}
else
{
$class->$method();
}
}
}
?>
// /app/framework/page.php
namespace framework;
class page
{
public static function render($page, $method, $options='')
{
// deze wil ik weg hebben
//include $_SERVER['DOCUMENT_ROOT'].'/app/pages/'.$page.'.php';
$class = new $page;
if(trim($options != ''))
{
$class->$method($options);
}
else
{
$class->$method();
}
}
}
?>
Tis nog plat maar dit werkt. class word geladen en segment kan ik ook bereiken. Zelfs $options print ie netjes op het scherm.
Nu dacht ik een stap verder te gaan en dit ook met mijn autoloader te doen. Maar dat werkt niet. De foutmelding word dan: class home not found.
Op mijn index.php
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
use framework\route;
use framework\page;
//use pages\pages; // moet dit hier?
include 'app/autoload.php';
// Add base route (startpage)
Route::add('/',function(){
//echo 'Welcome :-)';
page::render('home', 'index');
});
Route::run('/');
?>
use framework\route;
use framework\page;
//use pages\pages; // moet dit hier?
include 'app/autoload.php';
// Add base route (startpage)
Route::add('/',function(){
//echo 'Welcome :-)';
page::render('home', 'index');
});
Route::run('/');
?>
/app/pages/home.php
Code (php)
Iemand een sugestie?
EDIT
Probleem gevonden de vraag is/word ietsje anders :)
$class = new pages\home; werkt wel.
Echter hoe kan ik dit dynamisch maken?
EDIT 2
Soms dan krijg je zomaar inspiratie:
Werkt, iemand een suggestie of dit netter kan?
Gewijzigd op 10/04/2020 15:13:43 door Bart V B
Er zijn nog geen reacties op dit bericht.