Class niet gevonden

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jop B

Jop B

12/10/2021 13:19:23
Quote Anchor link
Hallo,


Het volgende heb ik aan de hand.
Ik probeer een class statisch te gebruiken in een andere class.
Nu krijg ik een error dat de class niet gevonden word.
Uncaught Error: Class 'app\controllers\Application' not found in /Applications/MAMP/htdocs/website/app/controllers/SiteController.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
<?php

namespace app\controllers;

class SiteController
{
    public function contact()
    {

        return Application::$app->render('contact');
    }

}


?>


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
<?php

namespace app\core;

class Application
{
        public static Application $app;

        public function __construct()
        {

                self::$app = $this;
        }


        public function render($view){

        }
}


?>


Zodra ik de namespace van SiteController verander naar app\core en de file in de core directory zet word deze wel gevonden.

Er gaat dus iets mis met de autoloader vermoed ik. Iemand een idee hoe ik dit kan oplossen?

toevoeging
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
return app\core\Application::class;
?>


Geeft resultaat app\controllers\app\core\Application
Gewijzigd op 12/10/2021 13:23:21 door Jop B
 
PHP hulp

PHP hulp

03/12/2021 10:46:59
 
Rob Doemaarwat

Rob Doemaarwat

12/10/2021 14:48:40
Quote Anchor link
https://www.php.net/manual/en/language.namespaces.basics.php

Oplossing 1) Gebruik de volledige naam (incl. namespace) voor de Application class. Anders zoekt PHP 'm in de huidige namespace (en daar vindt ie 'm niet = je foutmelding):
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
<?php

namespace app\controllers;

class SiteController
{
    public function contact()
    {

        return \app\core\Application::$app->render('contact');
//             ^^^^^^^^^^
    }

}


?>


Oplossing 2) Maak een alias aan voor Application (verwijs naar de volledige naam - incl. namespace; als je geen expliciet alias aangeeft is het laatste deel het alias = Application = je code werkt zoals bedoeld):

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
<?php

namespace app\controllers;

use app\core\Application;
//^^^^^^^^^^^^^^^^^^^^^^^

class SiteController
{
    public function contact()
    {

        return Application::$app->render('contact');
    }

}


?>
 
Jop B

Jop B

12/10/2021 22:44:23
Quote Anchor link
Hi Rob,


Thanks voor het antwoord, ik ben voor optie 2 gegaan.
Deze optie had ik zelf ook al geprobeerd maar had mij toen vergist en had de use boven de namespace gezet.
Door het antwoord dat jij gaf ging het lampje branden :)

Gr. Jop
 



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.