2013-07-03 16 views
8

Ho un pacchetto Symfony in cui dovrò utilizzare una classe personalizzata. Questa classe non deve essere accessibile da tutti i siti Web, ma solo da un controller di questo pacchetto. Ho visto alcune soluzioni relative ai venditori, ma questo è abbastanza pesante e non è necessario nel mio caso. Qualcuno ha una soluzione più semplice?Come includere una classe personalizzata in un pacchetto Symfony?

+0

'spazio dei nomi Acme \ MyBundle \ Class' .. per utilizzare:' use Acme \ MyBundle \ Class \ MyClass.php' –

risposta

5

La classe deve essere creata nel Acme\Bundle\Model spazio dei nomi e cartella, non\Class! Chi lo dice ?!

// ../src/Acme/Bundle/Model/Utility.php 
<?php namespace Acme\Bundle\Model; 
class Utility: 
.. 

Utilizzo in controllori:

<?php .. 
use Acme\Bundle\Model\Utility; 

$x = new Utility(); // FINE!:) 

Nome del file di (Utility.php) deve essere uguale al nome della classe.

+0

Ovviamente, l'ho detto, come ho usato la parola "Class" come esempio. Mi spiace che tu abbia riattaccato e perso il campione :) La posizione effettiva della classe non ha davvero nulla a che fare con il problema dell'OP. –

+0

Sì, ti capisco. Dannazione :) – Croll

20

Questo è ciò che namespaces sono per.

Da php.net:

Quali sono gli spazi dei nomi? Nella definizione più ampia, gli spazi dei nomi sono un modo per incapsulare gli oggetti.

In poche parole, includere lo spazio dei nomi in cima alla vostra personalizzato classe.

src/Acme/DemoBundle/Modello/MyClass.php

<?php 
namespace Acme\DemoBundle\Model; 

class MyClass { // ... 

e utilizzarlo nel vostro controller:

src/Acme/SomeOtherBundle/Controller/DefaultController.php

<?php 
namespace Acme\SomeOtherBundle\Controller; 

// ... 
use Acme\DemoBundle\Model\MyClass; # can be used in any class in any bundle 
// ... 

class DefaultController extends Controller { // ... 
+0

il '.php' alla fine non è necessario, poiché ogni file in' src/'diventa caricare in automatico. –

+0

@Pazi non ha prestato attenzione, buona cattura, modificato –

+0

Grazie per la risposta. L'ho fatto, ma in effetti, non ho idea di dove si trovi il file php della classe, e non so come includerlo ... (autoloads?) – maxime

Problemi correlati