-
Notifications
You must be signed in to change notification settings - Fork 715
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Smarty registered classes check prevents use of class constants to avoid typo bugs in templates #1028
Comments
Agreed, using class constants in templates helps us from keeping magic strings and numbers from proliferating through the codebase, and they're easy to grep for when determining the impact of a change. Having to add a ton of |
Using class constants should not trigger the notice. This is probably an unintended side effect of #880 |
I think this is referring to an issue I'm running into. Here are example files: index.php class MyConfig
{
const VAR1 = 'MyConstant';
}
$smarty = new Smarty();
$smarty->setTemplateDir('./templates');
$smarty->setCompileDir('./templates_c');
$smarty->display('index.tpl'); index.tpl Constant: {MyConfig::VAR1} In Smarty 4.5.5, this produces this output:
In Smarty 5.4.2, it works as expected with no deprecation warnings. In Smarty 4, adding |
My team makes extensive use of PHP class constants in our Smarty templates to avoid problems with typos in logic checks. With the new requirement that all classes be registered to access them statically our templates now generate deprecation warnings for each class constant.
It would be nice if class constants references (as opposed to static method calls) did not require class registration.
Alternatively I would like a supported way of overriding this behavior in a security policy. For example I would expect that overriding
isTrustedStaticClass()
orisTrustedStaticClassAccess()
in my security policy would allow me to suppress the registered class requirement. However since the check for class registration is done outside the security policy this does not work unless the security policy also registers the class before returning. CallingSmarty::registerClass()
from inside my security policy currently works but does not seem like it is a supported solution to the problem.The text was updated successfully, but these errors were encountered: