| Server IP : 47.82.179.145 / Your IP : 216.73.217.129 Web Server : nginx/1.26.3 System : Linux iZt4n9czhka2zvqfajdlr2Z 6.8.0-63-generic #66-Ubuntu SMP PREEMPT_DYNAMIC Fri Jun 13 20:25:30 UTC 2025 x86_64 User : www ( 1001) PHP Version : 8.3.30 Disable Function : passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv MySQL : OFF | cURL : ON | WGET : OFF | Perl : OFF | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : /www/wwwroot/scuipturepactory.com/wp-content/themes/plover/core/src/Router/ |
Upload File : |
<?php
namespace Plover\Core\Router;
use Plover\Core\Router\Exception\EndpointExistedException;
/**
* @since 1.0.0
*/
class Router {
/**
* Global namespace
*
* @var mixed|string
*/
protected $namespace;
/**
* Registered routes
*
* @var array
*/
protected $routes = [];
/**
* Global middlewares
*
* @var array
*/
protected $middlewares = [];
/**
* Create new router instance
*
* @param $namespace
*/
public function __construct( $namespace ) {
$this->namespace = $namespace;
}
/**
* Create router instance with v1 namespace.
*
* @return self
*/
public static function v1() {
return new self( 'plover/v1' );
}
/**
* Add read endpoint
*
* @param string $path
* @param $action
* @param array $args
*
* @return Endpoint
* @throws EndpointExistedException
*/
public function read( string $path, $action, array $args = [] ): Endpoint {
return $this->add_endpoint( \WP_REST_Server::READABLE, $path, $action, $args );
}
/**
* Add an endpoint
*
* @param string $method
* @param string $path
* @param $action
* @param array $args
*
* @return Endpoint
* @throws EndpointExistedException
*/
protected function add_endpoint( string $method, string $path, $action, array $args ): Endpoint {
if ( ! isset( $this->routes[ $path ] ) ) {
$this->routes[ $path ] = [];
}
if ( isset( $this->routes[ $path ][ $method ] ) ) {
throw new EndpointExistedException( $this->namespace, $method, $path );
}
$this->routes[ $path ][ $method ] = new Endpoint( $method, $path, $action, $args, $this->middlewares );
return $this->routes[ $path ][ $method ];
}
/**
* Add create endpoint
*
* @param string $path
* @param $action
* @param array $args
*
* @return Endpoint
* @throws EndpointExistedException
*/
public function create( string $path, $action, array $args = [] ): Endpoint {
return $this->add_endpoint( \WP_REST_Server::CREATABLE, $path, $action, $args );
}
/**
* Add edit endpoint
*
* @param string $path
* @param $action
* @param array $args
*
* @return Endpoint
* @throws EndpointExistedException
*/
public function edit( string $path, $action, array $args = [] ): Endpoint {
return $this->add_endpoint( \WP_REST_Server::EDITABLE, $path, $action, $args );
}
/**
* Add delete endpoint
*
* @param string $path
* @param $action
* @param array $args
*
* @return Endpoint
* @throws EndpointExistedException
*/
public function delete( string $path, $action, array $args = [] ): Endpoint {
return $this->add_endpoint( \WP_REST_Server::DELETABLE, $path, $action, $args );
}
/**
* Add a global middleware
*
* @param $middleware
*
* @return $this
*/
public function use( $middleware ): Router {
$this->middlewares[] = $middleware;
return $this;
}
/**
* Register all endpoints
*/
public function register() {
foreach ( $this->routes as $path => $endpoints ) {
$args = [];
foreach ( $endpoints as $method => $endpoint ) {
$args[] = [
'methods' => $method,
'callback' => [ $endpoint, 'handle' ],
'permission_callback' => '__return_true',
'args' => $endpoint->getArgs(),
];
}
register_rest_route( $this->namespace, $path, $args );
}
}
}