Vous êtes connecté en tant que anonymous Se Deconnecter
vendor/illuminate/view/Concerns/ManagesComponents.php
4f5a31d2
 <?php
 
 namespace Illuminate\View\Concerns;
 
 use Illuminate\Support\Arr;
 use Illuminate\Support\HtmlString;
 
 trait ManagesComponents
 {
     /**
      * The components being rendered.
      *
      * @var array
      */
     protected $componentStack = [];
 
     /**
      * The original data passed to the component.
      *
      * @var array
      */
     protected $componentData = [];
 
     /**
      * The slot contents for the component.
      *
      * @var array
      */
     protected $slots = [];
 
     /**
      * The names of the slots being rendered.
      *
      * @var array
      */
     protected $slotStack = [];
 
     /**
      * Start a component rendering process.
      *
      * @param  string  $name
      * @param  array  $data
      * @return void
      */
     public function startComponent($name, array $data = [])
     {
         if (ob_start()) {
             $this->componentStack[] = $name;
 
             $this->componentData[$this->currentComponent()] = $data;
 
             $this->slots[$this->currentComponent()] = [];
         }
     }
 
     /**
      * Get the first view that actually exists from the given list, and start a component.
      *
      * @param  array  $names
      * @param  array  $data
      * @return void
      */
     public function startComponentFirst(array $names, array $data = [])
     {
         $name = Arr::first($names, function ($item) {
             return $this->exists($item);
         });
 
         $this->startComponent($name, $data);
     }
 
     /**
      * Render the current component.
      *
      * @return string
      */
     public function renderComponent()
     {
         $name = array_pop($this->componentStack);
 
         return $this->make($name, $this->componentData($name))->render();
     }
 
     /**
      * Get the data for the given component.
      *
      * @param  string  $name
      * @return array
      */
     protected function componentData($name)
     {
         return array_merge(
             $this->componentData[count($this->componentStack)],
             ['slot' => new HtmlString(trim(ob_get_clean()))],
             $this->slots[count($this->componentStack)]
         );
     }
 
     /**
      * Start the slot rendering process.
      *
      * @param  string  $name
      * @param  string|null  $content
      * @return void
      */
     public function slot($name, $content = null)
     {
         if (func_num_args() === 2) {
             $this->slots[$this->currentComponent()][$name] = $content;
         } else {
             if (ob_start()) {
                 $this->slots[$this->currentComponent()][$name] = '';
 
                 $this->slotStack[$this->currentComponent()][] = $name;
             }
         }
     }
 
     /**
      * Save the slot content for rendering.
      *
      * @return void
      */
     public function endSlot()
     {
         last($this->componentStack);
 
         $currentSlot = array_pop(
             $this->slotStack[$this->currentComponent()]
         );
 
         $this->slots[$this->currentComponent()]
                     [$currentSlot] = new HtmlString(trim(ob_get_clean()));
     }
 
     /**
      * Get the index for the current component.
      *
      * @return int
      */
     protected function currentComponent()
     {
         return count($this->componentStack) - 1;
     }
 }