[李景山php]每天laravel-20161115|View.php

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[李景山php]每天laravel-20161115|View.php相关的知识,希望对你有一定的参考价值。

<?php

namespace Illuminate\View;

use Exception;
use Throwable;
use ArrayAccess;
use BadMethodCallException;
use Illuminate\Support\Str;
use Illuminate\Support\MessageBag;
use Illuminate\Contracts\Support\Arrayable;
use Illuminate\View\Engines\EngineInterface;
use Illuminate\Contracts\Support\Renderable;
use Illuminate\Contracts\Support\MessageProvider;
use Illuminate\Contracts\View\View as ViewContract;
// namespace about the view
class View implements ArrayAccess, ViewContract
{// class view implements arrayAccess,ViewContact
    /**
     * The view factory instance.
     *
     * @var \Illuminate\View\Factory
     */
    protected $factory;//The view factory instance.

    /**
     * The engine implementation.
     *
     * @var \Illuminate\View\Engines\EngineInterface
     */
    protected $engine;//The engine implementation

    /**
     * The name of the view.
     *
     * @var string
     */
    protected $view;//The name of the view.

    /**
     * The array of view data.
     *
     * @var array
     */
    protected $data;//The array of view data.

    /**
     * The path to the view file.
     *
     * @var string
     */
    protected $path;//The path to the view file.

    /**
     * Create a new view instance.
     *
     * @param  \Illuminate\View\Factory  $factory
     * @param  \Illuminate\View\Engines\EngineInterface  $engine
     * @param  string  $view
     * @param  string  $path
     * @param  array   $data
     * @return void
     */
    public function __construct(Factory $factory, EngineInterface $engine, $view, $path, $data = [])
    {// create a new instance about this
        $this->view = $view;
        $this->path = $path;
        $this->engine = $engine;
        $this->factory = $factory;

        $this->data = $data instanceof Arrayable ? $data->toArray() : (array) $data;
    }// something about the view

    /**
     * Get the string contents of the view.
     *
     * @param  callable|null  $callback
     * @return string
     */
    public function render(callable $callback = null)
    {//Get the string contents of the view.
        try {
            $contents = $this->renderContents();// get the contents

            $response = isset($callback) ? call_user_func($callback, $this, $contents) : null;
// get response
            // Once we have the contents of the view, we will flush the sections if we are
            // done rendering all views so that there is nothing left hanging over when
            // another view gets rendered in the future by the application developer.
            $this->factory->flushSectionsIfDoneRendering();// flush Sections

            return ! is_null($response) ? $response : $contents;// is_null
        } catch (Exception $e) {
            $this->factory->flushSections();

            throw $e;//Exception
        } catch (Throwable $e) {
            $this->factory->flushSections();

            throw $e;
        }
    }

    /**
     * Get the contents of the view instance.
     *
     * @return string
     */
    protected function renderContents()
    {// render contents
        // We will keep track of the amount of views being rendered so we can flush
        // the section after the complete rendering operation is done. This will
        // clear out the sections for any separate views that may be rendered.
        $this->factory->incrementRender();// inc render

        $this->factory->callComposer($this);// call composer

        $contents = $this->getContents();// getContents

        // Once we‘ve finished rendering the view, we‘ll decrement the render count
        // so that each sections get flushed out next time a view is created and
        // no old sections are staying around in the memory of an environment.
        $this->factory->decrementRender();// decrement Render

        return $contents;
    }

    /**
     * Get the sections of the rendered view.
     *
     * @return array
     */
    public function renderSections()
    {
        return $this->render(function () {
            return $this->factory->getSections();
        });
    }//render Sections

    /**
     * Get the evaluated contents of the view.
     *
     * @return string
     */
    protected function getContents()
    {
        return $this->engine->get($this->path, $this->gatherData());
    }// get contents

    /**
     * Get the data bound to the view instance.
     *
     * @return array
     */
    protected function gatherData()
    {//Get the data bound to the view instance
        $data = array_merge($this->factory->getShared(), $this->data);

        foreach ($data as $key => $value) {
            if ($value instanceof Renderable) {
                $data[$key] = $value->render();
            }
        }

        return $data;
    }//gather the shared and this data

    /**
     * Add a piece of data to the view.
     *
     * @param  string|array  $key
     * @param  mixed   $value
     * @return $this
     */
    public function with($key, $value = null)
    {// add a piece of data to the view
        if (is_array($key)) {// is array
            $this->data = array_merge($this->data, $key);
        } else {
            $this->data[$key] = $value;
        }

        return $this;
    }// return this

    /**
     * Add a view instance to the view data.
     *
     * @param  string  $key
     * @param  string  $view
     * @param  array   $data
     * @return $this
     */
    public function nest($key, $view, array $data = [])
    {
        return $this->with($key, $this->factory->make($view, $data));
    }//Add a view instance to the view data

    /**
     * Add validation errors to the view.
     *
     * @param  \Illuminate\Contracts\Support\MessageProvider|array  $provider
     * @return $this
     */
    public function withErrors($provider)
    {
        if ($provider instanceof MessageProvider) {
            $this->with(‘errors‘, $provider->getMessageBag());
        } else {
            $this->with(‘errors‘, new MessageBag((array) $provider));
        }// set errors

        return $this;
    }//Add validation errors to the view

    /**
     * Get the view factory instance.
     *
     * @return \Illuminate\View\Factory
     */
    public function getFactory()
    {
        return $this->factory;
    }//big get

    /**
     * Get the view‘s rendering engine.
     *
     * @return \Illuminate\View\Engines\EngineInterface
     */
    public function getEngine()
    {
        return $this->engine;
    }//get

    /**
     * Get the name of the view.
     *
     * @return string
     */
    public function name()
    {
        return $this->getName();
    }//get

    /**
     * Get the name of the view.
     *
     * @return string
     */
    public function getName()
    {
        return $this->view;
    }//get

    /**
     * Get the array of view data.
     *
     * @return array
     */
    public function getData()
    {
        return $this->data;
    }//get

    /**
     * Get the path to the view file.
     *
     * @return string
     */
    public function getPath()
    {
        return $this->path;
    }//get

    /**
     * Set the path to the view.
     *
     * @param  string  $path
     * @return void
     */
    public function setPath($path)
    {
        $this->path = $path;
    }//set

    /**
     * Determine if a piece of data is bound.
     *
     * @param  string  $key
     * @return bool
     */
    public function offsetExists($key)
    {
        return array_key_exists($key, $this->data);
    }//set

    /**
     * Get a piece of bound data to the view.
     *
     * @param  string  $key
     * @return mixed
     */
    public function offsetGet($key)
    {
        return $this->data[$key];
    }//set

    /**
     * Set a piece of data on the view.
     *
     * @param  string  $key
     * @param  mixed   $value
     * @return void
     */
    public function offsetSet($key, $value)
    {
        $this->with($key, $value);
    }//set

    /**
     * Unset a piece of data from the view.
     *
     * @param  string  $key
     * @return void
     */
    public function offsetUnset($key)
    {
        unset($this->data[$key]);
    }//set

    /**
     * Get a piece of data from the view.
     *
     * @param  string  $key
     * @return mixed
     */
    public function &__get($key)
    {
        return $this->data[$key];
    }// very good get type

    /**
     * Set a piece of data on the view.
     *
     * @param  string  $key
     * @param  mixed   $value
     * @return void
     */
    public function __set($key, $value)
    {
        $this->with($key, $value);
    }

    /**
     * Check if a piece of data is bound to the view.
     *
     * @param  string  $key
     * @return bool
     */
    public function __isset($key)
    {
        return isset($this->data[$key]);
    }

    /**
     * Remove a piece of bound data from the view.
     *
     * @param  string  $key
     * @return bool
     */
    public function __unset($key)
    {
        unset($this->data[$key]);
    }

    /**
     * Dynamically bind parameters to the view.
     *
     * @param  string  $method
     * @param  array   $parameters
     * @return \Illuminate\View\View
     *
     * @throws \BadMethodCallException
     */
    public function __call($method, $parameters)
    {
        if (Str::startsWith($method, ‘with‘)) {
            return $this->with(Str::snake(substr($method, 4)), $parameters[0]);
        }

        throw new BadMethodCallException("Method [$method] does not exist on view.");
    }//Dynamically bind parameters to the view.

    /**
     * Get the string contents of the view.
     *
     * @return string
     */
    public function __toString()
    {
        return $this->render();
    }// to String
}


本文出自 “专注php 群号:414194301” 博客,请务必保留此出处http://jingshanls.blog.51cto.com/3357095/1852558

以上是关于[李景山php]每天laravel-20161115|View.php的主要内容,如果未能解决你的问题,请参考以下文章

[李景山php]每天laravel-20161028|Translator.php

[李景山php]每天laravel-20161107|PhpEngine.php

[李景山php]每天laravel-20161106|EngineResolver.php

[李景山php]每天laravel-20161108|ShareErrorsFromSession.php

[李景山php]每天laravel-20160825|Encrypter

[李景山php]每天laravel-20161113|FileViewFinder-1.php