Skip to content

Commit a2668ed

Browse files
authored
Make attributes available within render method (#32978)
* make attributes available within render method * tweaks * Apply fixes from StyleCI (#32980)
1 parent b725a74 commit a2668ed

File tree

2 files changed

+21
-7
lines changed

2 files changed

+21
-7
lines changed

src/Illuminate/View/Component.php

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -66,11 +66,18 @@ public function resolveView()
6666
return $view;
6767
}
6868

69-
$factory = Container::getInstance()->make('view');
69+
$resolver = function ($view) {
70+
$factory = Container::getInstance()->make('view');
7071

71-
return $factory->exists($view)
72-
? $view
73-
: $this->createBladeViewFromString($factory, $view);
72+
return $factory->exists($view)
73+
? $view
74+
: $this->createBladeViewFromString($factory, $view);
75+
};
76+
77+
return $view instanceof Closure ? function (array $data = []) use ($view, $resolver) {
78+
return $resolver($view($data));
79+
}
80+
: $resolver($view);
7481
}
7582

7683
/**

src/Illuminate/View/Concerns/ManagesComponents.php

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
namespace Illuminate\View\Concerns;
44

5+
use Closure;
56
use Illuminate\Support\Arr;
67
use Illuminate\Support\HtmlString;
78
use Illuminate\View\View;
@@ -40,7 +41,7 @@ trait ManagesComponents
4041
/**
4142
* Start a component rendering process.
4243
*
43-
* @param \Illuminate\View\View|string $view
44+
* @param \Illuminate\View\View|\Closure|string $view
4445
* @param array $data
4546
* @return void
4647
*/
@@ -80,10 +81,16 @@ public function renderComponent()
8081
{
8182
$view = array_pop($this->componentStack);
8283

84+
$data = $this->componentData();
85+
86+
if ($view instanceof Closure) {
87+
$view = $view($data);
88+
}
89+
8390
if ($view instanceof View) {
84-
return $view->with($this->componentData())->render();
91+
return $view->with($data)->render();
8592
} else {
86-
return $this->make($view, $this->componentData())->render();
93+
return $this->make($view, $data)->render();
8794
}
8895
}
8996

0 commit comments

Comments
 (0)