真的这个问题让我发疯了。现在我想问一下用于var answer = await DisplayAlert("Exit", "Do you wan't to exit the App?", "Yes", "No");
if (answer)
{
// User choose Yes
}
else
{
// User choose No
}
的laravel with()
。我经常搜索和研究,但我无法获得成功和满意的满足感。所以这是主要问题。
我们可以RedirectResponse
使用with()
这样的
RedirectResponse
或者
return view('name')->with(['demo'=>$demo]);
给出上述方法对我来说是可以理解的 问题在这里。我们也可以这样使用。
return view('name')->with('demo',$demo);
因此我无法理解return view('name')->withDemo($demo);
背后的逻辑,因为withDemo()
未定义任何where.i在laravel中搜索withDemo()
。我发现了一些关于这里的信息
with()
我找到了类似的东西
vendor/laravel/framework/src/Illuminate/Http/RedirectResponse.php
请任何人都可以解释动态定义方法背后的逻辑,如public function __call($method, $parameters)
{
if (static::hasMacro($method)) {
return $this->macroCall($method, $parameters);
}
if (Str::startsWith($method, 'with')) {
return $this->with(Str::snake(substr($method, 4)), $parameters[0]);
}
throw new BadMethodCallException(
"Method [$method] does not exist on Redirect."
);
}
它可能是重复的问题,对不起,但我搜索了很多。我没有找到与此主题相关的内容。
答案 0 :(得分:1)
RedirectResponse上会出现同样的魔法,但您可能对Illuminate\View\View
上的代码感兴趣:
/**
* Dynamically bind parameters to the view.
*
* @param string $method
* @param array $parameters
* @return \Illuminate\View\View
*
* @throws \BadMethodCallException
*/
public function __call($method, $parameters)
{
if (static::hasMacro($method)) {
return $this->macroCall($method, $parameters);
}
if (! Str::startsWith($method, 'with')) {
throw new BadMethodCallException(sprintf(
'Method %s::%s does not exist.', static::class, $method
));
}
return $this->with(Str::camel(substr($method, 4)), $parameters[0]);
}
像@abrar一样指出这是使用PHP的魔术方法。当您调用对象上不存在的方法时,PHP将调用__call()
传递方法名称和参数。
你可以在这里看到Laravel将首先检查宏是否存在并且如果存在则使用它。否则,它确认方法名称以with
开头,然后将其直接传递给with()
方法,就像直接调用它一样。
答案 1 :(得分:1)
__call($method, $parameters)
。
当您致电withDemo($demo)
时,口译员会跳转到__call($method, $parameters)
$method = 'withDemo';
$parameters = [$demo];
'与'在substr
函数调用中被剥离并且它会被勒住。
真实的'使用变量名称调用'剥离'看起来像这样:
return $this->with('demo', $parameters[0]); // $parameters[0] -> $demo
答案 2 :(得分:0)
这是将函数和参数一起编写的更简单方法
例如。 with('key1', 'value1')
或withKey1('value1')
例如。 where('mycolumn', 'value')
或whereMycolumn('value')