Viewing file: Component.php (2.95 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
namespace Illuminate\Console\View\Components;
use Illuminate\Console\OutputStyle; use Illuminate\Console\QuestionHelper; use ReflectionClass; use Symfony\Component\Console\Helper\SymfonyQuestionHelper; use function Termwind\render; use function Termwind\renderUsing;
abstract class Component { /** * The output style implementation. * * @var \Illuminate\Console\OutputStyle */ protected $output;
/** * The list of mutators to apply on the view data. * * @var array<int, callable(string): string> */ protected $mutators;
/** * Creates a new component instance. * * @param \Illuminate\Console\OutputStyle $output * @return void */ public function __construct($output) { $this->output = $output; }
/** * Renders the given view. * * @param string $view * @param \Illuminate\Contracts\Support\Arrayable|array $data * @param int $verbosity * @return void */ protected function renderView($view, $data, $verbosity) { renderUsing($this->output);
render((string) $this->compile($view, $data), $verbosity); }
/** * Compile the given view contents. * * @param string $view * @param array $data * @return void */ protected function compile($view, $data) { extract($data);
ob_start();
include __DIR__."/../../resources/views/components/$view.php";
return tap(ob_get_contents(), function () { ob_end_clean(); }); }
/** * Mutates the given data with the given set of mutators. * * @param array<int, string>|string $data * @param array<int, callable(string): string> $mutators * @return array<int, string>|string */ protected function mutate($data, $mutators) { foreach ($mutators as $mutator) { $mutator = new $mutator;
if (is_iterable($data)) { foreach ($data as $key => $value) { $data[$key] = $mutator($value); } } else { $data = $mutator($data); } }
return $data; }
/** * Eventually performs a question using the component's question helper. * * @param callable $callable * @return mixed */ protected function usingQuestionHelper($callable) { $property = with(new ReflectionClass(OutputStyle::class)) ->getParentClass() ->getProperty('questionHelper');
$property->setAccessible(true);
$currentHelper = $property->isInitialized($this->output) ? $property->getValue($this->output) : new SymfonyQuestionHelper();
$property->setValue($this->output, new QuestionHelper);
try { return $callable(); } finally { $property->setValue($this->output, $currentHelper); } } }
|