2010-03-22 21 views

Respuesta

8

Hay muchas soluciones posibles. El más común, cuando se usa aplicación Zend, es registrar el espacio de nombres en application.ini añadiendo:

autoloaderNamespaces[] = "Example_" 

Otras soluciones:

  • añadir su dir para include_path usando set_include_path() (solución ad hoc)
  • Siga las convenciones de nomenclatura de PEAR (para que la resolución de la ruta sea posible)

Configure el autocargador en Bootstrap.php:

protected function _initAutoloader() 
{ 
    $autoloader = Zend_Loader_Autoloader::getInstance(); 
    $autoloader->registerNamespace("Example"); // or Example_ 
} 

Eventualmente, configurar el módulo o resource autoloader, por ejemplo.

$resourceLoader->addResourceTypes(array(
    'acl' => array(
     'path'  => 'acls/', 
     'namespace' => 'Acl', 
    ), 
    'example' => array(
     'path'  => 'examples/', 
     'namespace' => 'Example', 
    ),   
)); 
+0

¡Gracias, Takehin, funcionó! El "$ autoloader-> registerNamespace (..." ¡dit!! – curro

+0

Hola, es una publicación bastante antigua para preguntar, pero ¿aún así puedes ayudarme con esto? 'Zend (1.12)' Tengo un 'Ejemplo' de directorio y una clase' Example_Test 'directamente debajo de' Example'. He registrado un espacio de nombres 'Example' y luego, cuando accedo a la clase' Example_Test' en mi código 'php', puedo hacerlo sin ningún problema. Pero cuando miro el método' getClassPath() ' dentro de 'Zend_Loader_Autoloader_Resource' no devuelve una ruta válida (debido a algunas condiciones), por lo que el archivo no se carga con el método' autoload() '. Entonces, ¿cómo se va a cargar? –

1

Salida this older Zend Framework tutorial from Rob Allen, específicamente en la página 4, en el que habla sobre el programa previo. Sus nuevos tutoriales, por excelentes que sean, parecen contar con Zend Tool para hacer la creación de aplicaciones y pasar por alto esto.

Una cosa que me alarmó, sin embargo, fue que mencionó que la carpeta que está intentando incluir es public/library. A menos que intencionalmente quiera compartir su código con el mundo, le sugiero encarecidamente que lo ubique en otro lugar ... a menos que tenga una carpeta "pública" diferente no compartida con el público (en cuyo caso es posible que desee considerar renombrarlo para evitar confusiones futuras).

+0

Gracias, Cal. Lo siento, no tengo la biblioteca en el directorio público. Es solo un error. Está en el directorio "raíz". – curro

+0

El tutorial de Rob Allen se basa en ZF 1.5. La versión que estoy usando es 1.10. Aunque crea un archivo Bootstrap, la clase Bootstrap está vacía. Todo funciona bien excepto por las clases personalizadas. Tengo la biblioteca ZF en otro lugar y tengo PHP que incluye un punto de ruta. – curro

+0

La carne y las papas deben estar set_include_path, lo que creo que al menos podrías colocar en la clase de bootstrap vacía. Además, Rob ha actualizado los tutoriales a través de 1.10 en su sitio. –

24

A menudo nos encontramos con un problema al escribir nuestras propias funciones o clases personalizadas y dónde ubicarlas.

Para agregar una clase personalizada (o una biblioteca personalizada), se pueden usar los espacios de nombres del autocargador de zend framework.

Añadir la siguiente línea en el archivo application.ini

autoloaderNamespaces.custom = "Custom_" 

O

autoloaderNamespaces[] = "Custom_" 

Todas las clases personalizadas se mantendrá bajo directorio de la biblioteca. Cree un nombre de carpeta 'Personalizado' (que se define en application.ini) en el directorio de la biblioteca.

clases serán prefijo 'Custom_' en la declaración en el archivo (por ejemplo Custom_Test)

Ahora podemos usar esta clase como $test = new Custom_Test(), en nuestra aplicación.

+0

Para aquellos que están mirando esto, creo que este método es un poco más preferido, que la respuesta aceptada. –

+0

Estoy de acuerdo con Angl.King.47 y Muhammad Yaseen: en mi propia experiencia, esta es una manera mucho más simple y más eficiente de incluir tus propias bibliotecas de clase Además, el index.php estándar en zend incluirá el li el directorio brary en PHP incluye la ruta. –

0

Agregue su biblioteca personalizada al compositor.JSON:

"autoload": { 
"psr-0": {"Your": "vendor/My/library"} 
}, 

y correr compositor actualización

Cuestiones relacionadas