Router と Sammy の 2 つのクラスがあり、どちらも異なる名前空間にありますが、Router クラスで Sammy クラスを呼び出す必要がありますが、エラーが発生します
Notice: Undefined index: GlobeAPI\Classes\Router\Sammy in /opt/lampp/htdocs/web/globeapi/GlobeAPI/Classes/Autoloader/Autoloader.php on line 151
エラー自体は今のところ問題があります。Sammy クラスを適切に呼び出す方法がわかりません。
ここに Router.php コードがあります
namespace GlobeAPI\Classes\Router;
class Router
{
public static $call = null;
function __construct()
{
}
public static function get($route, $call) {
self::$call = $call;
Sammy::process($route, 'GET');
}
public static function post($route, $call) {
self::$call = $call;
Sammy::process($route, 'POST');
}
public static function put($route, $call) {
self::$call = $call;
Sammy::process($route, 'PUT');
}
public static function delete($route, $call) {
self::$call = $call;
Sammy::process($route, 'DELETE');
}
public static function ajax($route, $call) {
self::$call = $call;
Sammy::process($route, 'XMLHttpRequest');
}
public static function dispatch()
{
$call = explode('#', self::$call);
$controller = $call[0];
$function = $call[1];
self::loadController($controller);
self::loadFunction($controller, $function);
}
public static function loadController($controller)
{
$path = APP_PATH . 'controllers/' . ucfirst($controller) . '.php';
if(file_exists($path))
{
include_once($path);
}else
{
return false;
}
}
public static function loadFunction($controller, $function)
{
$cls = ucfirst($controller);
if(class_exists($cls))
{
$tmp = new $cls();
if(is_callable(array($tmp, $function)))
{
$tmp->$function();
}else
{
echo 0;
}
}
}
}
ここにSammy.phpコードがあります
namespace GlobeAPI\Classes\Sammy;
class Sammy {
public static $route_found = false;
public $uri = '';
public $segments = '';
public $method = '';
public $format = '';
public static function instance() {
static $instance = null;
if( $instance === null ) {
$instance = new Sammy;
}
return $instance;
}
public static function run() {
if( !static::$route_found ) {
echo 'Route not defined!';
}
ob_end_flush();
}
public static function process($route, $type) {
$sammy = static::instance();
// Check for ajax
if( $type == 'XMLHttpRequest' )
$sammy->method = isset($_SERVER['HTTP_X_REQUESTED_WITH']) ? $_SERVER['HTTP_X_REQUESTED_WITH'] : 'GET';
if( static::$route_found || (!preg_match('@^'.$route.'(?:\.(\w+))?$@uD', $sammy->uri, $matches) || $sammy->method != $type) ) {
return false;
}
// Get the extension
$extension = $matches[count($matches)-1];
$extension_test = substr($sammy->uri, -(strlen($extension)+1), (strlen($extension)+1));
if( $extension_test == '.' . $extension )
$sammy->format = $extension;
static::$route_found = true;
Router::dispatch();
}
public function __construct() {
ob_start();
$this->uri = $this->get_uri();
$this->segments = explode('/', trim($this->uri, '/'));
$this->method = $this->get_method();
}
public function segment($num) {
$num--;
// Remove the extension
$this->segments[$num] = isset($this->segments[$num]) ? rtrim($this->segments[$num], '.' . $this->format) : null;
return isset($this->segments[$num]) ? $this->segments[$num] : null;
}
protected function get_method() {
return isset($_SERVER['REQUEST_METHOD']) ? $_SERVER['REQUEST_METHOD'] : 'GET';
}
protected function get_uri($prefix_slash = true) {
if( isset($_SERVER['PATH_INFO']) ) {
$uri = $_SERVER['PATH_INFO'];
}elseif( isset($_SERVER['REQUEST_URI']) ) {
$uri = $_SERVER['REQUEST_URI'];
if( strpos($uri, $_SERVER['SCRIPT_NAME']) === 0 ) {
$uri = substr($uri, strlen($_SERVER['SCRIPT_NAME']));
}elseif( strpos($uri, dirname($_SERVER['SCRIPT_NAME'])) === 0 ) {
$uri = substr($uri, strlen(dirname($_SERVER['SCRIPT_NAME'])));
}
// This section ensures that even on servers that require the URI to be in the query string (Nginx) a correct
// URI is found, and also fixes the QUERY_STRING server var and $_GET array.
if( strncmp($uri, '?/', 2) === 0 ) {
$uri = substr($uri, 2);
}
$parts = preg_split('#\?#i', $uri, 2);
$uri = $parts[0];
if( isset($parts[1]) ) {
$_SERVER['QUERY_STRING'] = $parts[1];
parse_str($_SERVER['QUERY_STRING'], $_GET);
}else {
$_SERVER['QUERY_STRING'] = '';
$_GET = array();
}
$uri = parse_url($uri, PHP_URL_PATH);
}else {
// Couldn't determine the URI, so just return false
return false;
}
// Do some final cleaning of the URI and return it
return ($prefix_slash ? '/' : '').str_replace(array('//', '../'), '/', trim($uri, '/'));
}
public function format($name, $callback) {
$sammy = static::instance();
if( !empty($sammy->format) && $name == $sammy->format )
echo $callback($sammy);
else
return false;
}
}
$sammy = Sammy::instance();