У меня ниже контракта / интерфейса, который привязан поставщиком услуг, однако я становлюсь ниже ошибки:
ReflectionException в строке RouteDependencyResolverTrait.php 81: Приложение класса \ Http \ Controllers \ RocketShipContract не существует
- TokenMismatchException в строке VerifyCsrfToken.php 53: (браузер Firefox) в laravel 5.1?
- .env и файлы mail.php не будут обновляться - Laravel 5.1
- Команда crontab не найдена в моем git-bash для Windows 7
- добавить новый элемент в объект коллекции laravel
- Вызов неопределенного метода Illuminate \ Routing \ Route :: get ()
Что я делаю не так ?
контракт
namespace App\Contracts\Helpers; Interface RocketShipContract { public function blastOff(); }
Конкретный класс
namespace app\Contracts; use App\Contracts\Helpers\RocketShipContract; class RocketShip implements RocketShipContract { public function blastOff() { return 'Houston, we have ignition'; } }
Поставщик услуг
namespace App\Providers; use Illuminate\Support\ServiceProvider; use App\Contracts\RocketShip; class RocketShipServiceProvider extends ServiceProvider { protected $defer = true; /** * Bootstrap the application services. * * @return void */ public function boot() { // } /** * Register the application services. * * @return void */ public function register() { $this->app->bind('App\Contracts\Helpers\RocketShipContract', function($app){ return new App\Contracts\RocketShip($app['HttpClient']); }); } /** * Get the services provided by the provider. * * @return array */ public function provides() { return ['App\Contracts\Helpers\RocketShipContract']; } }
Контроллер
public function test(RocketShipContract $rocketship) { $boom = $rocketship->blastOff(); return view('test.index', compact('boom')); }
Ошибка, с которой вы получаете намеки на проблему: класс разрешается в пространстве имен App\Http\Controllers
. Это потому, что вам нужно указать полное пространство имен вашего интерфейса в контроллере.
Поэтому либо включите его с use
инструкции:
use App\Contracts\Helpers\RocketShipContract;
Или введите hint полное пространство имен:
public function test(App\Contracts\Helpers\RocketShipContract $rocketship) { // ... }