Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>A better way to achieve what you want is to trigger a <code>dispatch.error</code> event in your <code>checkAcl</code> function rather than trying to do a redirect. You can then handle this event and display the 403 page.</p> <p>To trigger the event:</p> <pre><code>if (!$this-&gt;acl-&gt;isAllowed($userRole, $controller, $privilege)) { $app = $e-&gt;getTarget(); $route = $e-&gt;getRouteMatch(); $e-&gt;setError('ACL_ACCESS_DENIED') // Pick your own value, would be better to use a const -&gt;setParam('route', $route-&gt;getMatchedRouteName()); $app-&gt;getEventManager()-&gt;trigger('dispatch.error', $e); } </code></pre> <p>Then in your onBootstrap add a listener for the <code>dispatch.error</code> event:</p> <pre><code>use Zend\Mvc\MvcEvent; ... $eventManager-&gt;attach(MvcEvent::EVENT_DISPATCH_ERROR, &lt;any callable&gt;, -999); </code></pre> <p>In your callback for <code>dispatch.error</code> event you just attached to:</p> <pre><code>$error = $event-&gt;getError(); if (empty($error) || $error != "ACL_ACCESS_DENIED") { return; } $result = $event-&gt;getResult(); if ($result instanceof StdResponse) { return; } $baseModel = new ViewModel(); $baseModel-&gt;setTemplate('layout/layout'); $model = new ViewModel(); $model-&gt;setTemplate('error/403'); $baseModel-&gt;addChild($model); $baseModel-&gt;setTerminal(true); $event-&gt;setViewModel($baseModel); $response = $event-&gt;getResponse(); $response-&gt;setStatusCode(403); $event-&gt;setResponse($response); $event-&gt;setResult($baseModel); return false; </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload