2015-06-16 4 views
3

Я пытаюсь установить интервенцию. Я запустил эту команду composer require intervention/image и composer.json обновлен. Я добавляю 'Image' => 'Intervention \ Image \ Facades \ Image :: class' in $aliases array and it's ok. Then i add Вмешательство \ Image \ ImageServiceProvider :: class` в массив $ providers и оно не работает.Вмешательство laravel 5

Это то, что я получить, когда тип композитор обновление

PHP Fatal error: Class 'Intervention\Image\ImageServiceProvider' not found in /home/vagrant/Code/laravel-basics/vendor/laravel/framework/src/Illuminate/Foundation/ProviderRepository.php on line 146 

[Symfony\Component\Debug\Exception\FatalErrorException]  
Class 'Intervention\Image\ImageServiceProvider' not found ` 

<?php 

ProviderRepository.php

<?php 

имен Осветите \ Foundation;

использование Illuminate \ Filesystem \ Filesystem; Использование Illuminate \ Contracts \ Foundation \ Application as ApplicationContract;

класс ProviderRepository { /** * Приложение осуществление. * * @var \ Illuminate \ Contracts \ Foundation \ Application */ protected $ app;

/** 
* The filesystem instance. 
* 
* @var \Illuminate\Filesystem\Filesystem 
*/ 
protected $files; 

/** 
* The path to the manifest file. 
* 
* @var string 
*/ 
protected $manifestPath; 

/** 
* Create a new service repository instance. 
* 
* @param \Illuminate\Contracts\Foundation\Application $app 
* @param \Illuminate\Filesystem\Filesystem $files 
* @param string $manifestPath 
* @return void 
*/ 
public function __construct(ApplicationContract $app, Filesystem $files, $manifestPath) 
{ 
    $this->app = $app; 
    $this->files = $files; 
    $this->manifestPath = $manifestPath; 
} 

/** 
* Register the application service providers. 
* 
* @param array $providers 
* @return void 
*/ 
public function load(array $providers) 
{ 
    $manifest = $this->loadManifest(); 

    // First we will load the service manifest, which contains information on all 
    // service providers registered with the application and which services it 
    // provides. This is used to know which services are "deferred" loaders. 
    if ($this->shouldRecompile($manifest, $providers)) { 
     $manifest = $this->compileManifest($providers); 
    } 

    // Next, we will register events to load the providers for each of the events 
    // that it has requested. This allows the service provider to defer itself 
    // while still getting automatically loaded when a certain event occurs. 
    foreach ($manifest['when'] as $provider => $events) { 
     $this->registerLoadEvents($provider, $events); 
    } 

    // We will go ahead and register all of the eagerly loaded providers with the 
    // application so their services can be registered with the application as 
    // a provided service. Then we will set the deferred service list on it. 
    foreach ($manifest['eager'] as $provider) { 
     $this->app->register($this->createProvider($provider)); 
    } 

    $this->app->setDeferredServices($manifest['deferred']); 
} 

/** 
* Register the load events for the given provider. 
* 
* @param string $provider 
* @param array $events 
* @return void 
*/ 
protected function registerLoadEvents($provider, array $events) 
{ 
    if (count($events) < 1) { 
     return; 
    } 

    $app = $this->app; 

    $app->make('events')->listen($events, function() use ($app, $provider) { 
     $app->register($provider); 
    }); 
} 

/** 
* Compile the application manifest file. 
* 
* @param array $providers 
* @return array 
*/ 
protected function compileManifest($providers) 
{ 
    // The service manifest should contain a list of all of the providers for 
    // the application so we can compare it on each request to the service 
    // and determine if the manifest should be recompiled or is current. 
    $manifest = $this->freshManifest($providers); 

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

     // When recompiling the service manifest, we will spin through each of the 
     // providers and check if it's a deferred provider or not. If so we'll 
     // add it's provided services to the manifest and note the provider. 
     if ($instance->isDeferred()) { 
      foreach ($instance->provides() as $service) { 
       $manifest['deferred'][$service] = $provider; 
      } 

      $manifest['when'][$provider] = $instance->when(); 
     } 

     // If the service providers are not deferred, we will simply add it to an 
     // array of eagerly loaded providers that will get registered on every 
     // request to this application instead of "lazy" loading every time. 
     else { 
      $manifest['eager'][] = $provider; 
     } 
    } 

    return $this->writeManifest($manifest); 
} 

/** 
* Create a new provider instance. 
* 
* @param string $provider 
* @return \Illuminate\Support\ServiceProvider 
*/ 
public function createProvider($provider) 
{ 
    return new $provider($this->app); 
} 

/** 
* Determine if the manifest should be compiled. 
* 
* @param array $manifest 
* @param array $providers 
* @return bool 
*/ 
public function shouldRecompile($manifest, $providers) 
{ 
    return is_null($manifest) || $manifest['providers'] != $providers; 
} 

/** 
* Load the service provider manifest JSON file. 
* 
* @return array 
*/ 
public function loadManifest() 
{ 
    // The service manifest is a file containing a JSON representation of every 
    // service provided by the application and whether its provider is using 
    // deferred loading or should be eagerly loaded on each request to us. 
    if ($this->files->exists($this->manifestPath)) { 
     $manifest = json_decode($this->files->get($this->manifestPath), true); 

     return array_merge(['when' => []], $manifest); 
    } 
} 

/** 
* Write the service manifest file to disk. 
* 
* @param array $manifest 
* @return array 
*/ 
public function writeManifest($manifest) 
{ 
    $this->files->put(
     $this->manifestPath, json_encode($manifest, JSON_PRETTY_PRINT) 
    ); 

    return $manifest; 
} 

/** 
* Create a fresh service manifest data structure. 
* 
* @param array $providers 
* @return array 
*/ 
protected function freshManifest(array $providers) 
{ 
    return ['providers' => $providers, 'eager' => [], 'deferred' => []]; 
} 

}

composer.json

{ 
"name": "laravel/laravel", 
"description": "The Laravel Framework.", 
"keywords": ["framework", "laravel"], 
"license": "MIT", 
"type": "project", 
"require": { 
    "php": ">=5.5.9", 
    "laravel/framework": "5.1.*", 
    "intervention/image": "dev-master" 
}, 
"require-dev": { 
    "fzaninotto/faker": "~1.4", 
    "mockery/mockery": "0.9.*", 
    "phpunit/phpunit": "~4.0", 
    "phpspec/phpspec": "~2.1" 
}, 
"autoload": { 
    "classmap": [ 
     "database", 
     "app/Models" 
    ], 
    "psr-4": { 
     "App\\": "app/" 
    } 
}, 
"autoload-dev": { 
    "classmap": [ 
     "tests/TestCase.php" 
    ] 
}, 
"scripts": { 
    "post-install-cmd": [ 
     "php artisan clear-compiled", 
     "php artisan optimize" 
    ], 
    "post-update-cmd": [ 
     "php artisan clear-compiled", 
     "php artisan optimize" 
    ], 
    "post-root-package-install": [ 
     "php -r \"copy('.env.example', '.env');\"" 
    ], 
    "post-create-project-cmd": [ 
     "php artisan key:generate" 
    ] 
}, 
"config": { 
    "preferred-install": "dist" 
}, 

"require": { 
"illuminate/html": "5.*" 
}, 

"minimum-stability": "dev", 
"prefer-stable": true 

}

+0

Можете ли вы предоставить код с ProviderRepository? – Chris

ответ

4

Я бы попробовать удалить ::class.

Эта установка работает для меня:

'providers' => [ 
    'Intervention\Image\ImageServiceProvider', 
], 
'aliases' => [ 
    'Image' => 'Intervention\Image\Facades\Image', 
] 
+0

Я не сказал, что я работаю с Laravel 5 .. –

+1

@DorinoCanciani название вашего сообщения __Intervention laravel 5__; P – whoacowboy

+0

ahahaah sorry :) –

0

Если вы используете ссылки 5.5 :: класс PHP, то вы не должны положить его в кавычки. Ввод его в кавычки делает его строкой, и это не то, что есть. Это просто статическая ссылка на полное имя класса.

Так что вы либо хотите использовать этот

'providers' => [ 
    Intervention\Image\ImageServiceProvider::class, 
], 
'aliases' => [ 
    'Image' => Intervention\Image\Facades\Image::class, 
] 

или это

'providers' => [ 
    'Intervention\Image\ImageServiceProvider', 
], 
'aliases' => [ 
    'Image' => 'Intervention\Image\Facades\Image', 
] 
+0

Я добавил Intervention \ Image \ ImageServiceProvider :: класс без кавычек, к существующему массиву поставщиков с :: ссылкой на класс, и это вызывает проблему –

+0

I ' m работает с Laravel 5, и я новичок в Laravel –

+0

Не могли бы вы попробовать запустить 'composer dump-autoload'? Дайте мне знать, если вы все еще получаете исключение после этого. –

Смежные вопросы