viewfile php,View.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

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值