Use BadMethodCallException for graceful failure (Twig only)

Fixes #1571
This also fixes method inheritance for behaviors by using parent::__call() to look for any methods provided by extensions, catches the exception, then continues with BAU
This commit is contained in:
Samuel Georges 2016-02-13 15:23:53 +11:00
parent 808c8f0ca4
commit 97daebfa9e

View File

@ -7,6 +7,7 @@ use Config;
use Cms\Classes\CodeBase;
use Cms\Classes\CmsException;
use October\Rain\Extension\Extendable;
use BadMethodCallException;
/**
* Component base class
@ -36,7 +37,7 @@ abstract class ComponentBase extends Extendable
public $name;
/**
* @var boolean Determines whether the component is hidden in the back-end UI.
* @var boolean Determines whether the component is hidden from the back-end UI.
*/
public $isHidden = false;
@ -265,15 +266,16 @@ abstract class ComponentBase extends Extendable
*/
public function __call($method, $parameters)
{
if (method_exists($this, $method)) {
return call_user_func_array([$this, $method], $parameters);
try {
parent::__call($method, $parameters);
}
catch (BadMethodCallException $ex) {}
if (method_exists($this->controller, $method)) {
return call_user_func_array([$this->controller, $method], $parameters);
}
throw new CmsException(Lang::get('cms::lang.component.method_not_found', [
throw new BadMethodCallException(Lang::get('cms::lang.component.method_not_found', [
'name' => get_class($this),
'method' => $method
]));