Hvordan registrerer du et navnerom med Silex autoloader

stemmer
13

Jeg eksperimenterer med å lage en forlengelse med Silex php mikro rammeverk for brukerautentisering, men jeg kan ikke synes å få autolasteren til å fungere. Kan noen kaste noe lys?

Jeg har en katalogstruktur som dette (avkortet)

usertest
|_lib
| |_silex.phar
| |_MyNamespace
|   |_UserExtension.php
|   |_User.php
|_www
  |_index.php

De relevante biter av index.php, som fungerer som bootstrap og den fremre styreenhet se slik ut:

require '../lib/silex.phar';

use Silex\Application;
use MyNamespace\UserExtension;

$app = new Application();
$app['autoloader']->registerNamespace( 'MyNamespace', '../lib' );
$app->register( new UserExtension() );

Klassen jeg prøver å laste ligner dette:

namespace MyNamespace;

use Silex\Application;
use Silex\ExtensionInterface;

class UserExtension implements ExtensionInterface {
    public function register( Application $app ) {
        $app['user'] = $app->share( function() use( $app ) {
            return new User();
        });
    }
}

All ganske rett frem uten at det kaster denne feilmeldingen:

Fatal error: Class 'MyNamespace\UserExtension' not found in /home/meouw/Projects/php/usertest/www/index.php on line 8

Jeg har syslet med symfony2 og har blitt fulgt instruksjonene for å sette opp den universelle klasse loader , men i dette tilfellet er jeg stabbet. Har jeg gått glipp av noe? Eventuelle hjelpe ville være verdsatt.

Publisert på 30/05/2011 klokken 23:22
kilden bruker
På andre språk...                            


5 svar

stemmer
59

I nyere versjoner av Silex autolasteren er foreldet, og du bør registrere alle dine navnerom gjennom composer.jsonfil som imo er en bedre løsning fordi du sentralisere dine selvladende definisjoner.

Eksempel:

{
    "require": {
        "silex/silex": "1.0.*@dev"
    },
    "autoload": {
        "psr-0": {
            "MyNameSpace": "src/"
        }
    }
}

Faktisk når du prøver å få tilgang til autoloaderen i noen nyere versjon av Silex følgende RuntimeException er kastet:

Du prøvde å få tilgang til autolast tjenesten. Autolasteren har blitt fjernet fra Silex. Det anbefales at du bruker Komponist å administrere avhengigheter og håndtere din autoloading. Se http://getcomposer.org for mer informasjon.

Svarte 05/07/2012 kl. 06:54
kilden bruker

stemmer
11
Deprecated - As of 2014-10-21 PSR-0 has been marked as deprecated.
PSR-4 is now recommended as an alternative

Det er derfor du bør bruke PSR-4 syntaks i composer.json

{
  "require": {
      "silex/silex": "1.0.*@dev",
  },
  "autoload": {
      "psr-4": {
          "Vendor\\Namespace\\": "/path"
      }
  }
}
Svarte 06/11/2014 kl. 11:01
kilden bruker

stemmer
11

Jeg vil bruke

$app['autoloader']->registerNamespace('MyNamespace', __DIR__.'/../lib');
Svarte 29/09/2011 kl. 14:20
kilden bruker

stemmer
3

Begge legger passende uttalelse til autoloaddelen av composer.jsonog registrere navnerom direkte ringer registerNamespacevar ikke fungerer for meg, før jeg henrettet composer updatei prosjekter mappen.

Svarte 14/12/2013 kl. 10:50
kilden bruker

stemmer
3

For å registrere navnerom, bare ring registerNamespaces()som dette:

$app = new Silex\Application();

$app['autoloader']->registerNamespaces(array(
    'Symfony'          => __DIR__.'/../vendor/',
    'Panda'            => __DIR__.'/../vendor/SilexDiscountServiceProvider/src',
    'Knp'              => __DIR__.'/../vendor/KnpSilexExtensions/',
    // ...
));
Svarte 06/04/2012 kl. 04:31
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more