PageRequestHandler.php 605 Bytes
<?php

namespace AC\Admin;

use AC;
use AC\Request;

class PageRequestHandler implements RequestHandlerInterface {

	/**
	 * @var PageFactoryInterface[]
	 */
	private $factories;

	public function add( string $slug, PageFactoryInterface $factory ): self {
		$this->factories[ $slug ] = $factory;

		return $this;
	}

	public function handle( Request $request ) {
		$slug = $request->get_query()->get( self::PARAM_TAB ) ?: 'columns';

		$page = isset( $this->factories[ $slug ] )
			? $this->factories[ $slug ]->create()
			: null;

		return apply_filters( 'ac/admin/request/page', $page, $request );
	}

}