![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/old/vendor/laminas/laminas-mvc/src/Controller/ |
<?php namespace Laminas\Mvc\Controller; use Laminas\View\Model\ModelInterface; use Laminas\Http\Header\Accept\FieldValuePart\AbstractFieldValuePart; use Laminas\Mvc\Controller\Plugin\Forward; use Laminas\Mvc\Controller\Plugin\Layout; use Laminas\Mvc\Controller\Plugin\Params; use Laminas\Mvc\Controller\Plugin\Redirect; use Laminas\Mvc\Controller\Plugin\Url; use Laminas\View\Model\ViewModel; use Laminas\EventManager\EventInterface as Event; use Laminas\EventManager\EventManager; use Laminas\EventManager\EventManagerAwareInterface; use Laminas\EventManager\EventManagerInterface; use Laminas\Http\PhpEnvironment\Response as HttpResponse; use Laminas\Http\Request as HttpRequest; use Laminas\Mvc\InjectApplicationEventInterface; use Laminas\Mvc\MvcEvent; use Laminas\ServiceManager\ServiceManager; use Laminas\Stdlib\DispatchableInterface as Dispatchable; use Laminas\Stdlib\RequestInterface as Request; use Laminas\Stdlib\ResponseInterface as Response; /** * Abstract controller * * Convenience methods for pre-built plugins (@see __call): * @codingStandardsIgnoreStart * @method ModelInterface acceptableViewModelSelector(array $matchAgainst = null, bool $returnDefault = true, AbstractFieldValuePart $resultReference = null) * @codingStandardsIgnoreEnd * @method Forward forward() * @method Layout|ModelInterface layout(string $template = null) * @method Params|mixed params(string $param = null, mixed $default = null) * @method Redirect redirect() * @method Url url() * @method ViewModel createHttpNotFoundModel(Response $response) */ abstract class AbstractController implements Dispatchable, EventManagerAwareInterface, InjectApplicationEventInterface { /** * @var PluginManager */ protected $plugins; /** * @var Request */ protected $request; /** * @var Response */ protected $response; /** * @var Event */ protected $event; /** * @var EventManagerInterface */ protected $events; /** * @var null|string|string[] */ protected $eventIdentifier; /** * Execute the request * * @param MvcEvent $e * @return mixed */ abstract public function onDispatch(MvcEvent $e); /** * Dispatch a request * * @events dispatch.pre, dispatch.post * @param Request $request * @param null|Response $response * @return Response|mixed */ public function dispatch(Request $request, Response $response = null) { $this->request = $request; if (! $response) { $response = new HttpResponse(); } $this->response = $response; $e = $this->getEvent(); $e->setName(MvcEvent::EVENT_DISPATCH); $e->setRequest($request); $e->setResponse($response); $e->setTarget($this); $result = $this->getEventManager()->triggerEventUntil(static fn($test): bool => $test instanceof Response, $e); if ($result->stopped()) { return $result->last(); } return $e->getResult(); } /** * Get request object * * @return Request */ public function getRequest() { if (! $this->request) { $this->request = new HttpRequest(); } return $this->request; } /** * Get response object * * @return Response */ public function getResponse() { if (! $this->response) { $this->response = new HttpResponse(); } return $this->response; } /** * Set the event manager instance used by this context * * @param EventManagerInterface $events * @return AbstractController */ public function setEventManager(EventManagerInterface $events) { $className = $this::class; $identifiers = [ self::class, $className, ]; $rightmostNsPos = strrpos($className, '\\'); if ($rightmostNsPos) { $identifiers[] = strstr($className, '\\', true); // top namespace $identifiers[] = substr($className, 0, $rightmostNsPos); // full namespace } $events->setIdentifiers(array_merge( $identifiers, array_values(class_implements($className)), (array) $this->eventIdentifier )); $this->events = $events; $this->attachDefaultListeners(); return $this; } /** * Retrieve the event manager * * Lazy-loads an EventManager instance if none registered. * * @return EventManagerInterface */ public function getEventManager() { if (! $this->events) { $this->setEventManager(new EventManager()); } return $this->events; } /** * Set an event to use during dispatch * * By default, will re-cast to MvcEvent if another event type is provided. * * @param Event $e * @return void */ public function setEvent(Event $e) { if (! $e instanceof MvcEvent) { $eventParams = $e->getParams(); $e = new MvcEvent(); $e->setParams($eventParams); unset($eventParams); } $this->event = $e; } /** * Get the attached event * * Will create a new MvcEvent if none provided. * * @return MvcEvent */ public function getEvent() { if (! $this->event) { $this->setEvent(new MvcEvent()); } return $this->event; } /** * Get plugin manager * * @return PluginManager */ public function getPluginManager() { if (! $this->plugins) { $this->setPluginManager(new PluginManager(new ServiceManager())); } $this->plugins->setController($this); return $this->plugins; } /** * Set plugin manager * * @return AbstractController */ public function setPluginManager(PluginManager $plugins) { $this->plugins = $plugins; $this->plugins->setController($this); return $this; } /** * Get plugin instance * * @param string $name Name of plugin to return * @param null|array $options Options to pass to plugin constructor (if not already instantiated) * @return mixed */ public function plugin($name, array $options = null) { return $this->getPluginManager()->get($name, $options); } /** * Method overloading: return/call plugins * * If the plugin is a functor, call it, passing the parameters provided. * Otherwise, return the plugin instance. * * @param string $method * @param array $params * @return mixed */ public function __call($method, $params) { $plugin = $this->plugin($method); if (is_callable($plugin)) { return call_user_func_array($plugin, $params); } return $plugin; } /** * Register the default events for this controller * * @return void */ protected function attachDefaultListeners() { $events = $this->getEventManager(); $events->attach(MvcEvent::EVENT_DISPATCH, [$this, 'onDispatch']); } /** * Transform an "action" token into a method name * * @param string $action * @return string */ public static function getMethodFromAction($action) { $method = str_replace(['.', '-', '_'], ' ', $action); $method = ucwords($method); $method = str_replace(' ', '', $method); $method = lcfirst($method); $method .= 'Action'; return $method; } }