我在使用Laravel 4时遇到了奇怪的经历。不要浪费太多时间我会深入研究这个问题。好的,我正在将命名空间组织到目录中,所以,我可能已经错过了什么,但是plz会检查它。我需要帮助。好的,让我告诉你代码。
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中定义
答案 0 :(得分: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;
}
}