0

我在使用 Laravel 4 时遇到了奇怪的经历。不要浪费太多时间,我会深入研究这个问题。好的,我正在将命名空间组织到目录中,所以我可能错过了或其他什么,但请检查一下。我需要帮助。好吧,让我给你看代码。

  File: app/services/profile/profile.php


   <?php namespace Services\Profile;

     use Services\Repo\ProfileRepoInterface as ProfileInterface;

     class Profile
     {
        protected $profile;
        function __construct(ProfileInterface $profile)
        {
            $this->profile = $profile;
        }
     }


File: app/services/repo/ProfileRepoInterface.php
<?php 
namespace Services\Repo;
interface ProfileRepoInterface{
    public function all();
}

>  File: app/services/repo/EloquentProfileRepository.php
>         <?php 
>      namespace Services\Repo; 
>     
>     class EloquentProfileRepository implements ProfileRepoInterface
>     {
>       public function all()
>       {
>           return 'Returned All';
>       }
>     }

我将接口绑定在 routes.php 文件的顶部

File: routes.php

    App::bind('Services\Repo\ProfileRepoInterface','Services\Repo\EloquentProfileRepository');
Route::get('/posts',function()
{
        $pro = new Services\Profile\Profile;
        var_dump($pro);
});

我尝试将“app/services”添加到 composer.json 文件的类映射中,但没有奏效。即使尝试添加到 ClassLoader 中的 global.php 文件仍然不起作用。我可能做错了什么?我得到了错误。

传递给 Services\Profile\Profile::__construct() 的参数 1 必须是 Services\Repo\ProfileRepoInterface 的实例,没有给出,在第 20 行的 E:\server\www\laravel\app\routes.php 中调用并定义

4

1 回答 1

2

如果你这样做

use Services\Repo\ProfileRepoInterface as ProfileInterface;

Laravel 不会为你自动注入它,它会期望你在实例化你的类时手动传递它。所以你只需要绑定它:

App::bind('ProfileInterface','Services\Repo\EloquentProfileRepository');

它会神奇地注入它:

 <?php namespace Services\Profile;

 class Profile
 {
    protected $profile;

    function __construct(ProfileInterface $profile)
    {
        $this->profile = $profile;
    }

 }
于 2013-11-13T14:52:36.127 回答