View

Testing Is Documentation

tests/Router/ViewTest.phpView - 图1

视图统一由视图组件完成,通常我们使用代理 \Leevel\Router\Proxy\View 类进行静态调用。

内置支持的视图驱动类型包括 html、phpui,未来可能增加其他驱动。

使用方式

使用容器 view 服务

  1. \App::make('view')->setVar($name, $value = null): void;

依赖注入

  1. class Demo
  2. {
  3. private \Leevel\Router\IView $view;
  4. public function __construct(\Leevel\Router\IView $view)
  5. {
  6. $this->view = $view;
  7. }
  8. }

使用静态代理

  1. \Leevel\Router\Proxy\View::setVar($name, $value = null): void;

view 配置

系统的 view 配置位于应用下面的 option/view.php 文件。

可以定义多个视图连接,并且支持切换,每一个连接支持驱动设置。

  1. <?php
  2. declare(strict_types=1);
  3. /*
  4. * This file is part of the your app package.
  5. *
  6. * The PHP Application For Code Poem For You.
  7. * (c) 2018-2099 http://yourdomian.com All rights reserved.
  8. *
  9. * For the full copyright and license information, please view the LICENSE
  10. * file that was distributed with this source code.
  11. */
  12. return [
  13. /*
  14. * ---------------------------------------------------------------
  15. * 默认视图驱动
  16. * ---------------------------------------------------------------
  17. *
  18. * 系统为所有视图提供了统一的接口,在使用上拥有一致性
  19. */
  20. 'default' => Leevel::env('VIEW_DRIVER', 'html'),
  21. /*
  22. * ---------------------------------------------------------------
  23. * 错误模板
  24. * ---------------------------------------------------------------
  25. *
  26. * 默认错误跳转对应的模板文件
  27. */
  28. 'fail' => 'fail',
  29. /*
  30. * ---------------------------------------------------------------
  31. * 成功模板
  32. * ---------------------------------------------------------------
  33. *
  34. * 默认成功跳转对应的模板文件
  35. */
  36. 'success' => 'success',
  37. /*
  38. * ---------------------------------------------------------------
  39. * 视图连接参数
  40. * ---------------------------------------------------------------
  41. *
  42. * 这里为所有的视图的连接参数,每一种不同的驱动拥有不同的配置
  43. * 虽然有不同的驱动,但是在视图使用上却有着一致性
  44. */
  45. 'connect' => [
  46. 'html' => [
  47. // driver
  48. 'driver' => 'html',
  49. // 后缀
  50. 'suffix' => '.html',
  51. ],
  52. 'phpui' => [
  53. // driver
  54. 'driver' => 'phpui',
  55. // 后缀
  56. 'suffix' => '.php',
  57. ],
  58. ],
  59. ];

mail 参数根据不同的连接会有所区别,通用的 view 参数如下:

配置项配置描述
fail错误模板
success成功模板

Uses

  1. <?php
  2. use Leevel\Router\IView;
  3. use Leevel\Router\View;
  4. use Leevel\View\Html;
  5. use Leevel\View\Phpui;

视图基本使用

  1. public function testBaseUse(): void
  2. {
  3. $view = new View(
  4. $html = new Html()
  5. );
  6. $this->assertInstanceof(IView::class, $view);
  7. $view->setVar('hello', 'world');
  8. $this->assertSame('world', $view->getVar('hello'));
  9. $this->assertSame('world', $html->getVar('hello'));
  10. }

deleteVar 删除变量值

  1. public function testDeleteVar(): void
  2. {
  3. $view = new View(
  4. $html = new Html()
  5. );
  6. $view->setVar('hello', 'world');
  7. $this->assertSame('world', $view->getVar('hello'));
  8. $this->assertSame('world', $html->getVar('hello'));
  9. $view->deleteVar(['hello']);
  10. $this->assertNull($view->getVar('hello'));
  11. $this->assertNull($html->getVar('hello'));
  12. }

clearVar 清空变量值

  1. public function testClearVar(): void
  2. {
  3. $view = new View(
  4. $html = new Html()
  5. );
  6. $view->setVar('foo', 'bar');
  7. $this->assertSame('bar', $view->getVar('foo'));
  8. $this->assertSame('bar', $html->getVar('foo'));
  9. $view->clearVar();
  10. $this->assertNull($view->getVar('foo'));
  11. $this->assertNull($html->getVar('foo'));
  12. }

display 加载视图文件

  1. public function testDisplay(): void
  2. {
  3. $view = new View(
  4. new Phpui([
  5. 'theme_path' => __DIR__,
  6. ])
  7. );
  8. $view->setVar('foo', 'bar');
  9. $this->assertSame(
  10. 'Hi here! bar',
  11. $view->display(__DIR__.'/assert/hello.php')
  12. );
  13. }

switchView 切换视图

  1. public function testSwitchView(): void
  2. {
  3. $view = new View(
  4. $phpui = new Phpui()
  5. );
  6. $view->setVar('foo', 'bar');
  7. $this->assertSame('bar', $view->getVar('foo'));
  8. $this->assertSame('bar', $phpui->getVar('foo'));
  9. $view->switchView($html = new Html());
  10. $this->assertSame('bar', $view->getVar('foo'));
  11. $this->assertSame('bar', $html->getVar('foo'));
  12. }