laravel如何将对象传递给方法工作?

时间:2016-12-12 15:25:24

标签: php laravel

namespace App\Http\Controllers\Auth;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

use App\Bar; //Q1. where is include App\Bar?
//Q2. where is new Bar; ?


class Foo extends Controller
{

    public function foo(Request $request, Bar $bar){ //Q3. what is Bar $bar means? pass object into method?
        #1
        $this->validateLogin($request);

        #2
        $bar->barFunc();
    }   
}

我正在学习laravel,我注意到laravel传递对象到方法

但我很困惑它是如何运作的。

这是我的问题

  1. 我们use namespace App\Bar,包含文件在哪里? (当您使用命名空间时,laravel auto包含文件吗?)

  2. 哪里是new Bar;

  3. foo(Request $request, Bar $bar)如何运作?

  4. 它是否将对象传递给方法?

    为什么不

    foo(){
        $bar = new Bar;
    }
    

2 个答案:

答案 0 :(得分:1)

数目:

  1. Laravel正在使用PSR-4 autoloading
  2. 您可能想了解dependency injection and IoC
  3. 与2相同。

答案 1 :(得分:1)

根据Laravel Docs

  

参见Implementations of PSR4 Autoloading

的示例
  • Laravel对控制器的方法使用type-hinting个依赖项。方法注入的常见用例是将Illuminate\Http\Request实例注入到控制器方法中。详细了解Dependency Injections in Controller

  • Laravel的Container被称为IOC(“Inversion of Control”)容器,就是这种情况,因为它允许您的控件发生在应用程序的顶层:你问你的低级“邮件程序”实例的级别代码(控制器,实现类等),容器为您提供一个。您的低级代码并不关心实际发送邮件的服务--Mandrill? Mailgun?发邮件?没关系,只要邮件程序类的接口是相同的。

  

希望这有帮助!