📋 Commit iniziale con: - ✅ Documentazione unificata in docs/ - ✅ Codice Laravel in netgescon-laravel/ - ✅ Script automazione in scripts/ - ✅ Configurazione sync rsync - ✅ Struttura organizzata e pulita 🔄 Versione: 2025.07.19-1644 🎯 Sistema pronto per Git distribuito
123 lines
2.9 KiB
PHP
123 lines
2.9 KiB
PHP
<?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
|
|
*/
|
|
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 string
|
|
*/
|
|
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');
|
|
|
|
$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);
|
|
}
|
|
}
|
|
}
|