-
Notifications
You must be signed in to change notification settings - Fork 11.2k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
ab72023
commit f1ef6e6
Showing
2 changed files
with
98 additions
and
47 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,95 @@ | ||
<?php | ||
|
||
namespace Illuminate\View; | ||
|
||
use ArrayIterator; | ||
use Closure; | ||
use Illuminate\Contracts\Support\DeferringDisplayableValue; | ||
use Illuminate\Support\Enumerable; | ||
use IteratorAggregate; | ||
|
||
class InvokableComponentVariable implements DeferringDisplayableValue, IteratorAggregate | ||
{ | ||
/** | ||
* The callable instance to resolve the variable value. | ||
* | ||
* @var \Closure | ||
*/ | ||
protected $callable; | ||
|
||
/** | ||
* Create a new variable instance. | ||
* | ||
* @param \Closure $callable | ||
* @return void | ||
*/ | ||
public function __construct(Closure $callable) | ||
{ | ||
$this->callable = $callable; | ||
} | ||
|
||
/** | ||
* Resolve the displayable value that the class is deferring. | ||
* | ||
* @return \Illuminate\Contracts\Support\Htmlable|string | ||
*/ | ||
public function resolveDisplayableValue() | ||
{ | ||
return $this->__invoke(); | ||
} | ||
|
||
/** | ||
* Get an interator instance for the variable. | ||
* | ||
* @return \ArrayIterator | ||
*/ | ||
public function getIterator() | ||
{ | ||
$result = $this->__invoke(); | ||
|
||
return new ArrayIterator($result instanceof Enumerable ? $result->all() : $result); | ||
} | ||
|
||
/** | ||
* Dynamically proxy attribute access to the variable. | ||
* | ||
* @param string $key | ||
* @return mixed | ||
*/ | ||
public function __get($key) | ||
{ | ||
return $this->__invoke()->{$key}; | ||
} | ||
|
||
/** | ||
* Dynamically proxy method access to the variable. | ||
* | ||
* @param string $method | ||
* @param array $parameters | ||
* @return mixed | ||
*/ | ||
public function __call($method, $parameters) | ||
{ | ||
return $this->__invoke()->{$method}(...$parameters); | ||
} | ||
|
||
/** | ||
* Resolve the variable. | ||
* | ||
* @return mixed | ||
*/ | ||
public function __invoke() | ||
{ | ||
return call_user_func($this->callable); | ||
} | ||
|
||
/** | ||
* Resolve the variable as a string. | ||
* | ||
* @return mixed | ||
*/ | ||
public function __toString() | ||
{ | ||
return (string) $this->__invoke(); | ||
} | ||
} |