2013-04-03 56 views
1

我很難理解如何才能做到最好。我理解門面如何作爲語法糖來呈現清晰的靜態代碼佈局風格,同時保持代碼的鬆耦合和可測試性。Laravel門面和緊耦合控制器

但是,我有以下問題。無論何時我有一個控制器,控制器都依賴於類的負載。讓我們以輸入類爲例。每個控制器都是一個IoC容器,所以實際上這很好。因爲如果我想用另一個類來更改輸入類。我只需要創建一個實現正確界面的新類。但是這意味着我應用中的每個控制器都依賴於相同的輸入類。我理解這個權利嗎?

所以我讀這個很漂亮的文章:http://www.nathandavison.com/posts/view/16/using-dependency-injection-and-ioc-in-laravel-4-controllers

總之它表明在你的控制器使用依賴注入(DI)。例如。

class UsersController extends BaseController 
{ 
    protected $response; 
    protected $request; 
    protected $validator; 
    protected $hasher; 
    protected $user; 
    public function __construct(
     Response $response, 
     \Illuminate\Http\Request $request, 
     \Illuminate\Validation\Factory $validator, 
     \Illuminate\Hashing\BcryptHasher $hasher, 
     User $user 
    ) { 
     $this->response = $response; 
     $this->request = $request; 
     $this->validator = $validator; 
     $this->hasher = $hasher; 
     $this->user = $user; 
    } 
    public function getIndex() 
    { 
     return $this->response->make('Hello World!'); 
    } 
} 

$app->bind('UsersController', function($app) { 
    $controller = new UsersController(
     new Response, 
     $app->make('request'), 
     $app->make('validator'), 
     $app->make('hash'), 
     new User 
    ); 
    return $controller; 
}); 

這有一定道理,但因爲它繞過了門面...我想聽到這個辦法的意見是不是框架的理念。這是不是好的做法?

回答

1

我想你一直在跟我剛剛回答的問題的另一個人一樣的教程。請不要重複我自己,請參閱my answer to his question