Вход Регистрация
Файл: vendor/laravel/framework/src/Illuminate/View/Concerns/ManagesStacks.php
Строк: 227
<?php

namespace IlluminateViewConcerns;

use 
InvalidArgumentException;

trait 
ManagesStacks
{
    
/**
     * All of the finished, captured push sections.
     *
     * @var array
     */
    
protected $pushes = [];

    
/**
     * All of the finished, captured prepend sections.
     *
     * @var array
     */
    
protected $prepends = [];

    
/**
     * The stack of in-progress push sections.
     *
     * @var array
     */
    
protected $pushStack = [];

    
/**
     * Start injecting content into a push section.
     *
     * @param  string  $section
     * @param  string  $content
     * @return void
     */
    
public function startPush($section$content '')
    {
        if (
$content === '') {
            if (
ob_start()) {
                
$this->pushStack[] = $section;
            }
        } else {
            
$this->extendPush($section$content);
        }
    }

    
/**
     * Stop injecting content into a push section.
     *
     * @return string
     *
     * @throws InvalidArgumentException
     */
    
public function stopPush()
    {
        if (empty(
$this->pushStack)) {
            throw new 
InvalidArgumentException('Cannot end a push stack without first starting one.');
        }

        return 
tap(array_pop($this->pushStack), function ($last) {
            
$this->extendPush($lastob_get_clean());
        });
    }

    
/**
     * Append content to a given push section.
     *
     * @param  string  $section
     * @param  string  $content
     * @return void
     */
    
protected function extendPush($section$content)
    {
        if (! isset(
$this->pushes[$section])) {
            
$this->pushes[$section] = [];
        }

        if (! isset(
$this->pushes[$section][$this->renderCount])) {
            
$this->pushes[$section][$this->renderCount] = $content;
        } else {
            
$this->pushes[$section][$this->renderCount] .= $content;
        }
    }

    
/**
     * Start prepending content into a push section.
     *
     * @param  string  $section
     * @param  string  $content
     * @return void
     */
    
public function startPrepend($section$content '')
    {
        if (
$content === '') {
            if (
ob_start()) {
                
$this->pushStack[] = $section;
            }
        } else {
            
$this->extendPrepend($section$content);
        }
    }

    
/**
     * Stop prepending content into a push section.
     *
     * @return string
     *
     * @throws InvalidArgumentException
     */
    
public function stopPrepend()
    {
        if (empty(
$this->pushStack)) {
            throw new 
InvalidArgumentException('Cannot end a prepend operation without first starting one.');
        }

        return 
tap(array_pop($this->pushStack), function ($last) {
            
$this->extendPrepend($lastob_get_clean());
        });
    }

    
/**
     * Prepend content to a given stack.
     *
     * @param  string  $section
     * @param  string  $content
     * @return void
     */
    
protected function extendPrepend($section$content)
    {
        if (! isset(
$this->prepends[$section])) {
            
$this->prepends[$section] = [];
        }

        if (! isset(
$this->prepends[$section][$this->renderCount])) {
            
$this->prepends[$section][$this->renderCount] = $content;
        } else {
            
$this->prepends[$section][$this->renderCount] = $content.$this->prepends[$section][$this->renderCount];
        }
    }

    
/**
     * Get the string contents of a push section.
     *
     * @param  string  $section
     * @param  string  $default
     * @return string
     */
    
public function yieldPushContent($section$default '')
    {
        if (! isset(
$this->pushes[$section]) && ! isset($this->prepends[$section])) {
            return 
$default;
        }

        
$output '';

        if (isset(
$this->prepends[$section])) {
            
$output .= implode(array_reverse($this->prepends[$section]));
        }

        if (isset(
$this->pushes[$section])) {
            
$output .= implode($this->pushes[$section]);
        }

        return 
$output;
    }

    
/**
     * Flush all of the stacks.
     *
     * @return void
     */
    
public function flushStacks()
    {
        
$this->pushes = [];
        
$this->prepends = [];
        
$this->pushStack = [];
    }
}
Онлайн: 1
Реклама