Laravel存储库问题

时间:2013-11-13 12:14:52

标签: php laravel laravel-4 repository-pattern

我在使用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中定义

1 个答案:

答案 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;
    }

 }