Versio

Warning: Missing argument 1

Overzicht Reageren

Victor -

Victor -

22/09/2011 13:22:11
Quote Anchor link
Dit is het bekende liedje, ik weet alleen niet wat er aan de hand is.
Wie kan mij hierbij helpen?

Warning: Missing argument 1 for Application::__construct(), called in C:\xampp\htdocs\library\application.class.php on line 24 and defined in C:\xampp\htdocs\library\application.class.php on line 7

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
<?php
class Application {
    protected $_uri;
    protected $_model;
    
    function
__construct($uri) { // Line 7
        $this->_uri = $uri;
        
        $this->loadController($this->_uri['controller']); // UsersController
        $this->loadModel($this->_uri['model']); // User
        $this->_template = new Template($this->_uri['controller'], $this->_uri['method']);
    }
    
    function
loadController($class) {
        $file = ROOT . DS . 'application' . DS . 'controller' . DS . $class . '.php';
        
        if(!file_exists($file)) {
            throw new Exception('Bestand niet gevonden', 404);
        }

        
        require_once($file);
        
        $controller = new $class; // Line 24
        
        if(method_exists($controller, $this->_uri['method'])) {
            $controller->{$this->_uri['method']}($this->_uri['var']);
        }

        else {
            $controller->index();
        }
    }


class UsersController extends Application {
    
}

url waarmee ik het script aanroep: http://localhost/users/add
edit: die url wordt doorgestuurd naar -> /public/index.php?url=users/add
Gewijzigd op 22/09/2011 14:09:13 door Victor -
 
PHP hulp

PHP hulp

25/05/2012 19:11:08
Gesponsorde koppelingen:
BHosted Hosting al vanaf € 1,- per maand

Controleer nu gratis jouw domeinnaam:

  
 
Wout van der Burg

Wout van der Burg

22/09/2011 13:45:37
Quote Anchor link
- Foutmeldingen?
- Welke variabel heb je het over?
- eventuele context?
 
Victor -

Victor -

22/09/2011 14:08:38
Quote Anchor link
Het probleem is dus, dat wanneer ik UsersController probeer aan te roepen, dat hij zichzelf opniew construct..
 
TJVB tvb

TJVB tvb

22/09/2011 14:30:41
Quote Anchor link
Doordat je UsersController laat erven van Application gaat het fout
De melding die je krijgt komt door regel 24.
UsersController heeft geen constructor zonder parameter terwijl je die wel aanroept zonder paramater.

De naamgeving application vs userscontroller doet mij vermoeden dat userscontroller helemaal niet moet erven van application.
 
Wout van der Burg

Wout van der Burg

22/09/2011 14:40:15
Quote Anchor link
Je sluit de class Application niet af met }
 
TJVB tvb

TJVB tvb

22/09/2011 14:43:03
Quote Anchor link
Wout, dat zorgt niet voor de foutmelding (aan de code te zien is dit maar een deel van de class)
 
Victor -

Victor -

22/09/2011 14:48:21
Quote Anchor link
klopt, het is niet de hele code
dus je zou hem er niet van af moeten laten hangen?
ik doe dat namelijk voor andere functies, misschien kan ik die in een andere class zetten, ik kijk wel even..

Toevoeging op 22/09/2011 14:51:29:

als ik heb
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
class Controller {
 //bla
}

class UsersController extends Controller {
 // bla
}


moet ik dan apart controller laden?
 
Pim -

Pim -

23/09/2011 01:34:56
Quote Anchor link
Probeer je probleem eens te herleiden tot de simpelste vorm. En geef eens een stack trace enzo.
 
Victor -

Victor -

23/09/2011 07:47:29
Quote Anchor link
Sorry, ik ben nog een redelijke beginner in OOP wat is een stack trace?
 
Pim -

Pim -

26/09/2011 13:17:19
Quote Anchor link
De constructor verwacht een argument, de uri. In r24 roep je de constructor aan, zonder het argument mee te geven.
In de functie loadController lijkt de variabele $class gevuld te zijn met 'Application', waardoor je in r24 de applicatie klasse instantieert (er een object van maakt / de constructor aanroept).
Weet je zeker dat je $uri['controller'] juist hebt ingevuld? Mij lijkt het namelijk dat daar een controller klasse moet staan, niet 'Application'.

Een stack trace is een lijst met de functies die aangeroepen zijn samen met de gebruikte argumenten. Als je een mooie Integrated Development Environment (IDE) opzet en je xdebug in debug modus draait (het kan ook met de functie xdebug_print_function_stack() als je xdebug hebt geïnstalleerd) krijg je heel mooi die lijst te zien. Bij xdebug krijg je dat ook te zien als er bijv. fouten zijn. Stack traces zijn een heel handig hulpmiddel voor debugging.
(Iemand zin om een tut te schrijven?)
Gewijzigd op 26/09/2011 13:20:38 door Pim -
 
Wouter J

Wouter J

27/09/2011 17:57:09
Quote Anchor link
Pim - op 26/09/2011 13:17:19:
(Iemand zin om een tut te schrijven?)

Goed idee, ik ga wel bezig met een tutorial over debuggen in PHP.
 
Pim -

Pim -

27/09/2011 19:17:50
Quote Anchor link
Ik ben benieuwd
 
Victor -

Victor -

27/09/2011 20:31:19
Quote Anchor link
@Pim, de variabele $class is gevuld met UsersController, die wel een child is van Application?

Ik ben ook zeer benieuwd naar de tut:D
 
Pim -

Pim -

01/10/2011 14:17:13
Quote Anchor link
Dan moet je dus werk de url meegeven als argument.
Doe iets als new $className($this->url)
 



Overzicht Reageren