switch index form for example documentacion collective ciclo php laravel laravel-4

php - index - Laravel 4 clase de mesa de trabajo no encontrada



laravel yield example (3)

Estoy intentando desarrollar un paquete en laravel 4, mi primer intento de un paquete. Encontré un par de tutoriales que he tratado de seguir:

http://jasonlewis.me/article/laravel-4-develop-packages-using-the-workbench

y

http://culttt.com/2013/06/24/creating-a-laravel-4-package/

Y por supuesto en la documentación oficial.

He seguido la estructura básica para crear el marco. Sin embargo, al cargar la aplicación obtengo un error de clase no encontrada. Esto se relaciona directamente con el proveedor de servicios que he colocado en el archivo app.php.

Aquí está mi entrada en la matriz de proveedores:

''Longestdrive/Calendar/CalendarServiceProvider''

Mi estructura de carpetas es:

laravel/workbench/longestdrive/calendar/src/Longestdrive/Calendar

Mi proveedor de servicios tiene las siguientes entradas:

<?php namespace Longestdrive/Calendar; use Illuminate/Support/ServiceProvider; class CalendarServiceProvider extends ServiceProvider { /** * Indicates if loading of the provider is deferred. * * @var bool */ protected $defer = false; /** * Bootstrap the application events. * * @return void */ public function boot() { $this->package(''longestdrive/calendar''); } /** * Register the service provider. * * @return void */ public function register() { // } /** * Get the services provided by the provider. * * @return array */ public function provides() { return array(); } }

He revisado la ortografía y ejecuté un autocar de volcado de compositor desde la raíz del proyecto y la raíz del paquete.

Me he quedado sin ideas para resolver la clase, ¿no encontré ninguna idea en la que me haya equivocado?

La línea que produce el error es esta:

C:/wamp/www/googleapi/laravel/vendor/laravel/framework/src/Illuminate/Foundation/ProviderRepository.php

Cualquier ayuda apreciada

Gracias

Actualización: ejecuté una actualización del compositor como se sugiere en la carpeta workbench / package con una respuesta que no hay nada que actualizar. Luego corrí compositor en la raíz del proyecto y se produjo un error:

[RuntimeException] Error Output: PHP Fatal error: Class ''Longestdrive/Calendar/CalendarServiceProvider'' not found in C:/wamp/www/googleapi/laravel/vendor/laravel/framework/src/Illuminate/Foundation/ProviderRe pository.php on line 123

Probablemente publiqué la línea de error incorrecta anteriormente. La respuesta completa de excepción es:

Class ''Longestdrive/Calendar/CalendarServiceProvider'' not found

El extracto de error:

* @param /Illuminate/Foundation/Application $app * @param string $provider * @return /Illuminate/Support/ServiceProvider */ public function createProvider(Application $app, $provider) { return new $provider($app); }

¿Cuál asumo que se relaciona con el cargador del proveedor de servicios que no encuentra el CalendarServiceProvider?


Además de la respuesta de @ilpaijin ''y @ Andrew Holt , a veces surge la necesidad (cuando hay una nueva versión de Laravel) de ejecutar la composer update dentro de la carpeta workbench/vendor/package .

Además, como se indica here , el composer.json dentro del paquete debe requerir la misma versión de illuminate/support que la requerida de laravel/framework en el composer.json la raíz del proyecto.

Gracias a @biscii nota que se debe usar:

"illuminate/support": "4.1.x"

en lugar de

"illuminate/support": "4.x"


Encontré que ejecutar la instalación del compositor desde la carpeta de trabajo / [proveedor] / [paquete] solucionó el problema.


Me encontré con el mismo error, así que fui más profundo en su flujo para saber qué pasaba.

Básicamente, diseccionando un poco, en la fase de arranque, cuando se carga bootstrap/autoload.php se ejecuta al final:

if (is_dir($workbench = __DIR__.''/../workbench'')) { Illuminate/Workbench/Starter::start($workbench); }

Esto requiere CADA workbench/vendor/package/**/**/**/autoload.php que encontró (usando el componente Symfony Finder)

$finder->in($path)->files()->name(''autoload.php'')->depth(''<= 3'');


Eso es importante porque espera encontrar workbench/vendor/package/vendor/autoload.php .


Sucesivamente en bootstrap/start.php obtiene los ''proveedores'' definidos en config/app.php e intenta cargar cada uno de ellos:

$providers = $config[''providers'']; $app->getProviderRepository()->load($app, $providers);

y luego en ProviderRepository.php

foreach ($providers as $provider) { $instance = $this->createProvider($app, $provider);

así que vamos a terminar con:

public function createProvider(Application $app, $provider) { return new $provider($app);

donde trató de crear una instancia de una clase no es realmente autocargado. Y es por eso que se lanza la excepción!


En conclusión...

  • Como dijo @Ray, al eliminar su Servicio de ''providers'' => array( suppliers ''providers'' => array( no se produce ningún error porque return new $myServiceDeclaredInProviderArray($app); nunca se return new $myServiceDeclaredInProviderArray($app); para ese servicio.

  • Como dijo @Andrew Holt

Encontré que ejecutar la instalación del compositor desde la carpeta de trabajo / [proveedor] / [paquete] solucionó el problema.

Tiene toda la razón porque crea el directorio y los archivos del proveedor de carga automática, y todo funciona como esperamos porque encuentra los archivos de carga automática:

$finder->in($path)->files()->name(''autoload.php'')->depth(''<= 3'');

  • Yo

    php artisan dump-autoload funciona si elimina el servicio de la matriz de proveedores