Browse Source

Merge pull request #11496 from cakephp/behavior-classname

Add BehaviorRegistry::className().
Mark Story 8 years ago
parent
commit
a9faa0f789
2 changed files with 37 additions and 5 deletions
  1. 17 5
      src/ORM/BehaviorRegistry.php
  2. 20 0
      tests/TestCase/ORM/BehaviorRegistryTest.php

+ 17 - 5
src/ORM/BehaviorRegistry.php

@@ -84,19 +84,31 @@ class BehaviorRegistry extends ObjectRegistry implements EventDispatcherInterfac
     /**
      * Resolve a behavior classname.
      *
-     * Part of the template method for Cake\Core\ObjectRegistry::load()
-     *
      * @param string $class Partial classname to resolve.
-     * @return string|false Either the correct classname or false.
+     * @return string|null Either the correct classname or null.
+     * @since 3.5.7
      */
-    protected function _resolveClassName($class)
+    public static function className($class)
     {
         $result = App::className($class, 'Model/Behavior', 'Behavior');
         if (!$result) {
             $result = App::className($class, 'ORM/Behavior', 'Behavior');
         }
 
-        return $result;
+        return $result ?: null;
+    }
+
+    /**
+     * Resolve a behavior classname.
+     *
+     * Part of the template method for Cake\Core\ObjectRegistry::load()
+     *
+     * @param string $class Partial classname to resolve.
+     * @return string|false Either the correct classname or false.
+     */
+    protected function _resolveClassName($class)
+    {
+        return static::className($class) ?: false;
     }
 
     /**

+ 20 - 0
tests/TestCase/ORM/BehaviorRegistryTest.php

@@ -52,6 +52,26 @@ class BehaviorRegistryTest extends TestCase
     }
 
     /**
+     * Test classname resolution.
+     *
+     * @return void
+     */
+    public function testClassName()
+    {
+        Plugin::load('TestPlugin');
+
+        $expected = 'Cake\ORM\Behavior\TranslateBehavior';
+        $result = BehaviorRegistry::className('Translate');
+        $this->assertSame($expected, $result);
+
+        $expected = 'TestPlugin\Model\Behavior\PersisterOneBehavior';
+        $result = BehaviorRegistry::className('TestPlugin.PersisterOne');
+        $this->assertSame($expected, $result);
+
+        $this->assertNull(BehaviorRegistry::className('NonExistent'));
+    }
+
+    /**
      * Test loading behaviors.
      *
      * @return void