我知道为了在php中创建实例,您必须使用new
关键字。
$object = new ClassName;
现在请看下面的代码,这在laravel中很常见
public function store(Request $request) {
// some code inside store method
}
我的问题是何时创建$request
实例并填充数据?以及如何将其作为方法中的参数传递?
答案 0 :(得分:1)
$ request是在Laravel请求/响应周期的开始时创建的。查看您的 index.php 文件,您将在第52行看到类似的内容:
$response = $kernel->handle(
$request = Illuminate\Http\Request::capture()
);
如果您使用 capture() 函数,则最终结果为:
/vendor/laravel/framework/src/Illuminate/Http/Request.php
这样做:
/**
* Create a new Illuminate HTTP request from server variables.
*
* @return static
*/
public static function capture()
{
static::enableHttpMethodParameterOverride();
return static::createFromBase(SymfonyRequest::createFromGlobals());
}
Laravel Request构建在SymfonyRequest之上,因此,如果您遵循 SymfonyRequest :: createFromGlobals(),它将带您:
/vendor/symfony/http-foundation/Request.php
在 createFromGlobals()中有以下行:
$request = self::createRequestFromFactory($_GET, $_POST, array(), $_COOKIE, $_FILES, $server);
最后,如果转到 createRequestFromFactory(),您将看到:
private static function createRequestFromFactory(array $query = array(), array $request = array(), array $attributes = array(), array $cookies = array(), array $files = array(), array $server = array(), $content = null)
{
if (self::$requestFactory) {
$request = call_user_func(self::$requestFactory, $query, $request, $attributes, $cookies, $files, $server, $content);
if (!$request instanceof self) {
throw new \LogicException('The Request factory must return an instance of Symfony\Component\HttpFoundation\Request.');
}
return $request;
}
return new static($query, $request, $attributes, $cookies, $files, $server, $content);
}
这是第一次发出或传递回请求(如果已实例化)的地方。因此,当您使用时:
some_function(Request $request)
“请求”仅表示参数必须为“请求”类型,而$ request是在 index.php 中创建的全局$ request变量。 希望对您有所帮助。