Closed dennis-fedco closed 6 years ago
Suggested fix:
Consider the line https://github.com/zendframework/zend-expressive-zendviewrenderer/blob/master/src/ZendViewRenderer.php#L341
Add the line just before it to be:
$layout->setVariables(
$this->mergeParams($layout->getTemplate(),
get_object_vars($layout->getVariables())) //can be replaced by []
);
then the layout gets the default parameters. I'd add a PR for this but not entirely sure how to set up the tests, nor the way to verify if the tests will work.
Delegator Factory
Note too that using delegator factory in place of piping middleware produces the same results.
I am trying to inject default parameters into my layout, on every request.
Currently I do this:
Pipe a custom layer middleware (before pipeRouting / dispatch):
In my
LayerMiddleware
I useaddDefaultParam
like so:Then when rendering an action in my ActionMiddleware:
The layout is being rendered, but without any of the default parameters. i.e. the
foo
is not being merged/rendered.Possible Cause
I suspect it is due to layout being created and set before my
LayerMiddleware
is called.And that happens when ApplicationFactory is called before any middleware is piped:
https://github.com/zendframework/zend-expressive/blob/2.0.5/src/Container/ApplicationFactory.php#L69 https://github.com/zendframework/zend-expressive/blob/2.0.5/src/Container/NotFoundDelegateFactory.php#L25
So my
addDefaultParam
comes too late in the pipeline, when layout is already set inZendViewRenderer
, without any of my added default parameters.Is there a way to add default params to the layout via MiddleWare? If there is a better way to do this, please let me know as well.