我有一个字符串,路由,然后我将它爆炸,然后我有一个类名。 $callback = explode('@', $callback); $callback[0]
是类名。我正在制作一个路由器,并根据课程和方法我返回。
我想获得完整的命名空间,当我使用它时,它可以工作,但现在我想动态地制作它。
如何将BaseController连接到:: class?
BasController::class
$fullclass = HERE I NEED THE FULL NAMESPACE$callback[0];
$class = new $fullclass;
$method = $callback[1];
$class->$method();
Exaple index.php
Router::route('/user/{id}/' , 'BaseController@show');
Router::execute($_SERVER['REQUEST_URI']);
路由器:
namespace App;
class Router
{
private static $routes = array();
private function __construct()
{
}
private function __clone()
{
}
public static function route($pattern, $callback)
{
$pattern = $pattern;
self::$routes[$pattern] = $callback;
}
public static function execute($url)
{
foreach (self::$routes as $pattern => $callback) {
if ($pattern == $url) {
$callback = explode('@', $callback);
$fullclass = __NAMESPACE__ . '\\Controllers\\' . $callback[0];
$class = new $fullclass;
$method = $callback[1];
$class->$method();
}else{
echo 404;
}
}
}
}
答案 0 :(得分:0)
我希望您尝试检索命名空间
echo (new \ReflectionClass($object))->getNamespaceName() ;
如果您在该范围内尝试
__NAMESAPCE__
如果您正在寻找autoload
,请参阅此文档答案 1 :(得分:0)
BasController :: class在字符串中返回一个完整的类名,在这种情况下,您可以简单地在其上连接任何字符串。如果$ callback [0]是一个字符串,你可以在代码下面做。
$fullclass = BasController::class . $callback[0];
$class = new $fullclass;
$method = $callback[1];
$class->$method();
答案 2 :(得分:0)
我正在寻找的是将班级作为路线的参数
Router::route('/user/{id}/' , App\Controllers\BaseController::class , 'show');