Vous êtes connecté en tant que anonymous Se Deconnecter
vendor/illuminate/view/Concerns/ManagesLayouts.php
4f5a31d2
 <?php
 
 namespace Illuminate\View\Concerns;
 
 use InvalidArgumentException;
 use Illuminate\Contracts\View\View;
 
 trait ManagesLayouts
 {
     /**
      * All of the finished, captured sections.
      *
      * @var array
      */
     protected $sections = [];
 
     /**
      * The stack of in-progress sections.
      *
      * @var array
      */
     protected $sectionStack = [];
 
     /**
      * The parent placeholder for the request.
      *
      * @var mixed
      */
     protected static $parentPlaceholder = [];
 
     /**
      * Start injecting content into a section.
      *
      * @param  string  $section
      * @param  string|null  $content
      * @return void
      */
     public function startSection($section, $content = null)
     {
         if ($content === null) {
             if (ob_start()) {
                 $this->sectionStack[] = $section;
             }
         } else {
             $this->extendSection($section, $content instanceof View ? $content : e($content));
         }
     }
 
     /**
      * Inject inline content into a section.
      *
      * @param  string  $section
      * @param  string  $content
      * @return void
      */
     public function inject($section, $content)
     {
         $this->startSection($section, $content);
     }
 
     /**
      * Stop injecting content into a section and return its contents.
      *
      * @return string
      */
     public function yieldSection()
     {
         if (empty($this->sectionStack)) {
             return '';
         }
 
         return $this->yieldContent($this->stopSection());
     }
 
     /**
      * Stop injecting content into a section.
      *
      * @param  bool  $overwrite
      * @return string
      *
      * @throws \InvalidArgumentException
      */
     public function stopSection($overwrite = false)
     {
         if (empty($this->sectionStack)) {
             throw new InvalidArgumentException('Cannot end a section without first starting one.');
         }
 
         $last = array_pop($this->sectionStack);
 
         if ($overwrite) {
             $this->sections[$last] = ob_get_clean();
         } else {
             $this->extendSection($last, ob_get_clean());
         }
 
         return $last;
     }
 
     /**
      * Stop injecting content into a section and append it.
      *
      * @return string
      *
      * @throws \InvalidArgumentException
      */
     public function appendSection()
     {
         if (empty($this->sectionStack)) {
             throw new InvalidArgumentException('Cannot end a section without first starting one.');
         }
 
         $last = array_pop($this->sectionStack);
 
         if (isset($this->sections[$last])) {
             $this->sections[$last] .= ob_get_clean();
         } else {
             $this->sections[$last] = ob_get_clean();
         }
 
         return $last;
     }
 
     /**
      * Append content to a given section.
      *
      * @param  string  $section
      * @param  string  $content
      * @return void
      */
     protected function extendSection($section, $content)
     {
         if (isset($this->sections[$section])) {
             $content = str_replace(static::parentPlaceholder($section), $content, $this->sections[$section]);
         }
 
         $this->sections[$section] = $content;
     }
 
     /**
      * Get the string contents of a section.
      *
      * @param  string  $section
      * @param  string  $default
      * @return string
      */
     public function yieldContent($section, $default = '')
     {
         $sectionContent = $default instanceof View ? $default : e($default);
 
         if (isset($this->sections[$section])) {
             $sectionContent = $this->sections[$section];
         }
 
         $sectionContent = str_replace('@parent', '@parent', $sectionContent);
 
         return str_replace(
             '@parent', '@parent', str_replace(static::parentPlaceholder($section), '', $sectionContent)
         );
     }
 
     /**
      * Get the parent placeholder for the current request.
      *
      * @param  string  $section
      * @return string
      */
     public static function parentPlaceholder($section = '')
     {
         if (! isset(static::$parentPlaceholder[$section])) {
             static::$parentPlaceholder[$section] = '##parent-placeholder-'.sha1($section).'##';
         }
 
         return static::$parentPlaceholder[$section];
     }
 
     /**
      * Check if section exists.
      *
      * @param  string  $name
      * @return bool
      */
     public function hasSection($name)
     {
         return array_key_exists($name, $this->sections);
     }
 
     /**
      * Get the contents of a section.
      *
      * @param  string  $name
      * @param  string|null  $default
      * @return mixed
      */
     public function getSection($name, $default = null)
     {
         return $this->getSections()[$name] ?? $default;
     }
 
     /**
      * Get the entire array of sections.
      *
      * @return array
      */
     public function getSections()
     {
         return $this->sections;
     }
 
     /**
      * Flush all of the sections.
      *
      * @return void
      */
     public function flushSections()
     {
         $this->sections = [];
         $this->sectionStack = [];
     }
 }