Autloaden van classes

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Bart V B

Bart V B

10/04/2020 14:02:01
Quote Anchor link
Beste PHPvrienden.

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)
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
<?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();
         }        
    }
}

?>

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)
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
<?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('/');
?>

/app/pages/home.php
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
<?php
namespace pages;

class home {
    
    public function index()
    {

        echo 'Van Home Index';
    }


    public function foo($id)
    {

        echo 'from Home class segment foo! and id = '.$id;
    }
}

?>


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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$class
= "pages\\{$page}";
$class = new $class;
?>

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.



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.