2012-07-21 28 views
6

Sé que esta pregunta ya se ha hecho, pero parece que el proceso de carga automática ha cambiado un poco con el compositor.agregar una biblioteca a silex

Solo quiero agregar una biblioteca de clases a mi proyecto de silex.

Hice, pues, este archivo: proveedor \ lib \ picture.php

<?php 
namespace MyNamespace; 

class Picture 
{ 
    function testage() 
    { 
     echo 'hihaaa ça marche'; exit; 
    } 
} 

de vendedor/compositor/autoload_namespaces.php, añadí esta línea a la gran variedad:

'MyNamespace' => $vendorDir . '/lib/', 

y en el archivo principal añadí:

use MyNamespace\Picture as Picture; 

y lo llamó así:

$app->register(new Picture()); 

que me da este error:

Fatal error: Class 'MyNamespace\Picture' not found... 

Simplemente no sé cómo agregar una clase que puede utilizar desde cualquier controlador, fácilmente, sin línea de comandos (no uso compositor, descargué silex preconfigurado), ¿alguna idea?

Respuesta

12

Si está utilizando el compositor, no debe cambiar el directorio del proveedor. No debe agregar archivos en él, y no debe modificar los archivos generados por el compositor.

Te recomiendo que coloques esas clases en el directorio src. @gunnx muestra cómo puede configurar la carga automática en composer.json, para que se vuelva a generar cada vez que ejecute composer install.

El archivo estaría en src/MyNamespace/Picture.php. La configuración de carga automática en composer.json sería:

{ 
    "autoload": { 
     "psr-0": { "MyNamespace": "src/" } 
    } 
} 

La solución real es una combinación de las dos respuestas anteriores. Pero creo que es importante obtener los detalles correctos ;-).

+1

Al final de su pregunta, él dice explícitamente que no está usando el compositor. – Maerlyn

+0

Thx @igorw! ¡Poner "src /" lo hizo funcionar para mí! =) (Aunque me pregunto por qué) –

2

Su clase de imagen debe estar en este archivo: vendor/lib/MyNamespace/Picture.php. Tenga en cuenta el espacio de nombre completo y la carcasa.

+0

gracias, su respuesta está realmente ayudando. También agregué implementar el ServiceProviderInterface y agregar los métodos de arranque y registro, y ahora no tengo ningún error. – Vilrouge

+0

Si mi respuesta resolvió su problema, acéptelo. – Maerlyn

2

Puede agregar su propio código al autocargador agregando lo siguiente a su compositor.json p.

{ 
"autoload": { 
    "psr-0": {"Acme": "src/"} 
} 
Cuestiones relacionadas