Hé lang geleden,

Ik zit met een probleempje, ik heb een site waar ik caldav in probeer te steken (zodat de kalenders beschikbaar zijn op gsm en pc). Nu loop ik vast bij het aansluiten van items.

Al mijn databank tabelen zijn classes, ik probeer deze nu dit in orde te brengen maar krijg onderstaande fout:
Class 'Sabre\DAV\Auth\Backend\memberzoneLogin' not found


Ik weet dat het te maken heeft met namespace maar snap niet goed wat het doet en hoe ik dit kan oplossen. Kan iemand dit in het nederlands toelichten? ik vindt wel veel in het engels maar raak daar verward.

Alvast weer hartelijk bedankt voor jullie tijd.

Mvg. Knipper

<?php

namespace Sabre\DAV\Auth\Backend;

class sr extends AbstractBasic
{
    protected $mailbox;

    public function __construct($mailbox)
    {
        $this->mailbox = $mailbox;
    }

    protected function validateUserPass($username, $password)
    {
        $login = new memberzoneLogin();
    	$login->setMail($username);
    	$login->setPassword($password);
...
Vergeet je niet de use waarin je aangeeft dat je de namespace gebruikt?
Volgens mij haal je use en namespace door elkaar. Dit is iets wat je zelf knutselt, dus gebruik je je eigen namespace. Je extend daarbij een SabreDav class. Die kun je via een use invoegen, of door gewoon de hele naam te gebruiken. Maar je gaat niet in de namespace van SabreDav zit "klooien".
<?php

namespace Mijn\Name\Space;

use Sabre\DAV\Auth\Backend\AbstractBasic;

class sr extends AbstractBasic{
//...
}

?>

Of dus:
<?php

namespace Mijn\Name\Space;

class sr extends \Sabre\DAV\Auth\Backend\AbstractBasic{
//...
}

?>
Ja dat klopt,

ik probeer die AbstractBasic uit te breiden met een eigen geschreven stukje zodat het werkt op een al bestaande gebruikers databank.

Hiervoor moet ik echter mijn memberzoneLogin() class kunnen aanroepen.

Alle bestanden worden via een include toegevoegd dus dat werkt normaal.
Als je memberzoneLogin() niet in een namespace zit (maar echt in een platte include .php file), dan moet je er gewoon een backslash voorzetten:

$login = new \memberzoneLogin();

Als je verder ook niks in/met een namespace doet kun je die declaratie bovenin ook weglaten (en dan kun je evt. bovenstaande backspace ook weer weglaten, maar het kan geen kwaad om 'm te laten staan).

Je kunt namespaces als directories zien. Met "namespace Foo\Bar" geef je aan dat je in de Foo\Bar directorie wilt gaan werken. Alle classes die je zonder verder verwijzing aanroept worden dus in die namespace/directory gezocht. Begin je de class naam echter met een backslash, dan geef je aan dat je class dus in de "root" namespace (geen namespace) gezocht moet worden. Of je kunt dus ook \Andere\Name\Space\MijnObject() doen.
ha ha ha, zeer stom maar die \ doet het hem. Bedankt

ook bedankt voor de uitleg

Reageren