Browse Source

Add AppView as a starting default.

Mark Story 10 years ago
parent
commit
8c92292603
2 changed files with 39 additions and 4 deletions
  1. 12 4
      src/View/ViewBuilder.php
  2. 27 0
      tests/TestCase/View/ViewBuilderTest.php

+ 12 - 4
src/View/ViewBuilder.php

@@ -18,8 +18,8 @@ use Cake\Core\App;
 use Cake\Event\EventManager;
 use Cake\Network\Request;
 use Cake\Network\Response;
-use Cake\View\View;
 use Cake\View\Exception\MissingViewException;
+use Cake\View\View;
 
 
 /**
@@ -297,6 +297,9 @@ class ViewBuilder
     /**
      * Using the data in the builder, create a view instance.
      *
+     * If className() is null, App\View\AppView will be used.
+     * If that class does not exist, then Cake\View\View will be used.
+     *
      * @param array $vars The view variables/context to use.
      * @param \Cake\Network\Request $request The request to use.
      * @param \Cake\Network\Response $response The response to use.
@@ -306,14 +309,19 @@ class ViewBuilder
      */
     public function build($vars = [], Request $request = null, Response $response = null, EventManager $events = null)
     {
-        if ($this->_className === 'View') {
-            $className = App::className($this->_className, 'View');
+        $className = $this->_className;
+        if ($className === null) {
+            $className = App::className('App', 'View', 'View') ?: 'Cake\View\View';
+        }
+        if ($className === 'View') {
+            $className = App::className($className, 'View');
         } else {
-            $className = App::className($this->_className, 'View', 'View');
+            $className = App::className($className, 'View', 'View');
         }
         if (!$className) {
             throw new MissingViewException([$this->_className]);
         }
+
         $data = [
             'name' => $this->_name,
             'viewPath' => $this->_templatePath,

+ 27 - 0
tests/TestCase/View/ViewBuilderTest.php

@@ -14,6 +14,7 @@
  */
 namespace Cake\Test\TestCase\View;
 
+use Cake\Core\Configure;
 use Cake\TestSuite\TestCase;
 use Cake\View\ViewBuilder;
 
@@ -144,6 +145,32 @@ class ViewBuilderTest extends TestCase
     }
 
     /**
+     * Test that the default is AppView.
+     *
+     * @return void
+     */
+    public function testBuildAppViewMissing()
+    {
+        Configure::write('App.namespace', 'Nope');
+        $builder = new ViewBuilder();
+        $view = $builder->build();
+        $this->assertInstanceOf('Cake\View\View', $view);
+    }
+
+    /**
+     * Test that the default is AppView.
+     *
+     * @return void
+     */
+    public function testBuildAppViewPresent()
+    {
+        Configure::write('App.namespace', 'TestApp');
+        $builder = new ViewBuilder();
+        $view = $builder->build();
+        $this->assertInstanceOf('TestApp\View\AppView', $view);
+    }
+
+    /**
      * test missing view class
      *
      * @expectedException \Cake\View\Exception\MissingViewException