现在,iam学习如何制作MVC框架,并且iam被困在路由中。我不知道如何制造弹头。
开头的数组看起来像这样
[
"_name" => "admin",
"_path" => "/admin/edit/{id}",
"_controller" => "AdminController@editAction",
"_method" => "GET"
]
当这样调用Url时:http://localhost/admin/edit/1
Array看起来像这样
[
"_name" => "admin",
"_path" => "/admin/edit/{id}",
"_controller" => "AdminController@editAction",
"_method" => "GET",
"_params" => [
"id" => 1
]
]
现在,我要检查_path的一部分是否等于请求的网址,然后获取Slug并将其发送给RouteCollection类
public static function match($uri) {
$hasPath = false;
$route = RouteCollection::getRoute();
foreach($route as $i):
if(strpos($i['_path'], $uri) !== false):
preg_replace_callback("#\{(\w++)(<.*?>)?(\?[^\}]*+)?\}#", function($mm) {
RouteCollection::setParams($mm[1], ???); // $mm[1] = placeholder without {}
}, $i['_path']);
endif;
endforeach;
}
但是我怎么能说(管理/编辑)后面的所有内容都显示为正确的子弹
答案 0 :(得分:0)
我想我找到了解决此代码问题的方法,可以将段塞及其值保存在路由数组中
public static function generate($uri) {
$routes = RouteCollection::getRoute();
self::$uri = $uri;
self::$breakedParam = explode("-", $uri);
self::$name = explode("/", self::$breakedParam[0]);
if($uri == "/"):
self::$name = "app";
else:
self::$name = self::$name[1];
endif;
if(\array_key_exists(self::$name, $routes)):
$routeUri = explode("-", $routes[self::$name]['_path']);
// Check for slug
\preg_replace_callback("#\{(\w++)(<.*?>)?(\?[^\}]*+)?\}#", function($m){
//Check if breakedParam has the Key and add value to Array
if(\array_key_exists(self::$integer, self::$breakedParam)):
self::$params[$m[1]] = self::$breakedParam[self::$integer];
self::$integer++;
RouteCollection::setParams(self::$name, self::$params);
endif;
}, $routes[self::$name]["_path"]);
else:
echo "existirt nicht";
endif;
}
这不是我相信的完美方式,但它现在可以正常使用
如果您有更好的方法向思想家开放