Warning: Missing argument 1
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
url waarmee ik het script aanroep: http://localhost/users/add
edit: die url wordt doorgestuurd naar -> /public/index.php?url=users/add
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)
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
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 {
}
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 -
- Foutmeldingen?
- Welke variabel heb je het over?
- eventuele context?
- Welke variabel heb je het over?
- eventuele context?
Het probleem is dus, dat wanneer ik UsersController probeer aan te roepen, dat hij zichzelf opniew construct..
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.
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.
Je sluit de class Application niet af met }
Wout, dat zorgt niet voor de foutmelding (aan de code te zien is dit maar een deel van de class)
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
moet ik dan apart controller laden?
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)
moet ik dan apart controller laden?
Probeer je probleem eens te herleiden tot de simpelste vorm. En geef eens een stack trace enzo.
Sorry, ik ben nog een redelijke beginner in OOP wat is een stack trace?
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?)
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 -
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.
Ik ben benieuwd
@Pim, de variabele $class is gevuld met UsersController, die wel een child is van Application?
Ik ben ook zeer benieuwd naar de tut:D
Ik ben ook zeer benieuwd naar de tut:D
Dan moet je dus werk de url meegeven als argument.
Doe iets als new $className($this->url)
Doe iets als new $className($this->url)




