0
我一直在工作(主要是爲了好玩)在自定義路由器上。 這是一個正在進行的工作,所以任何建議總是歡迎!無法獲取使用自定義路由器加載css/js文件
但我的主要問題是,dessss/js文件不再加載。 它看起來像文件的路徑附加到當前的URL,所以用戶/(css路徑)。
在Chrome和Firefox中,資源只是繼續加載,沒有任何響應/代碼被返回。如果我故意導致引發異常,例如更改文件路徑,我會看到返回異常的html。
我已經做了很多調試,似乎無法弄清楚。
/**
* @var
*/
private $routes;
/**
* @var string
* Todo: add this to an ini file or something
*/
private $base_route = "/index.php";
/**
* @param $route
* @param $callback
* @param string $method
*/
public function addRoute($route, $callback, $method = Route::GET)
{
$routes = $this->getRoutes();
if (empty($routes) || !in_array($route, $routes)) {
$this->setRoute(
[
"route" => $route,
"callback" => $callback
], $method
);
return;
}
}
/**
* @param array $route
* @param $method
*/
public function setRoute(array $route, $method)
{
$this->routes[$method][] = $route;
}
/**
* @return mixed
*/
public function getRoutes()
{
return $this->routes;
}
/**
* @throws \Exception
*/
public function handle()
{
$route = $this->getURI();
$route = str_replace($this->base_route, "", $route);
$urlparts = explode("?", $route);
if (count($urlparts) > 1) {
$route = $urlparts[0];
$query = $urlparts[1];
}
if ($this->isAssetRoute($route)) {
$parts = explode("/", $route);
foreach ($parts as $part) {
if ($part !== "public") {
unset($parts[$part]);
} else {
continue;
}
}
$route = implode($parts);
return APP_PATH . "/" . $route;
}
if (empty($route)) {
$this->executeCallback("HomeController");
return;
}
$exists = false;
$routes = $this->getRoutes();
$requested_method = $this->getMethod();
if (!isset($routes[$requested_method])) {
throw new Exception("404: Route {$route} does not exist with method {$requested_method}");
}
$declared_routes = $routes[$requested_method];
$count_routes = count($declared_routes);
for ($i = 0; $i < $count_routes; $i++) {
if ($declared_routes[$i]["route"] === $route) {
$exists = true;
$data = $declared_routes[$i];
continue;
}
}
if (!$exists) {
throw new \Exception("404: route {$route} does not exist!");
}
//Todo: replace [var]
$route = $this->compileRoute($route);
$this->executeCallback($data["callback"]);
}
/**
* @return mixed
*/
private function getProtocol()
{
return $_SERVER["HTTPS"];
}
/**
* @return mixed
*/
public function getMethod()
{
return $_SERVER["REQUEST_METHOD"];
}
/**
* @return mixed
*/
public function getURI()
{
return $_SERVER["REQUEST_URI"];
}
/**
* @param $route
* @param $callback
*/
public function get($route, $callback)
{
$this->setRoute(
[
"route" => $route,
"callback" => $callback
], Route::GET
);
}
/**
* @param $route
* @param $callback
*/
public function post($route, $callback)
{
$this->setRoute(
[
"route" => $route,
"callback" => $callback
], Route::POST
);
}
/**
* @param $route
* @return mixed
*/
public function compileRoute(&$route)
{
$uri = explode("/", $_SERVER["REQUEST_URI"]);
$formatted_route = "";
foreach ($uri as $key => $param) {
$formatted_route .= "/" . preg_replace(
"/\[(.*)\]/", "1", $param
);
}
return str_replace($this->base_route, "", $formatted_route);
}
/**
* @param $callback
* @throws \Exception
*/
public function executeCallback($callback)
{
$callback_data = explode("::", $callback);
$controller = $callback_data[0];
if (!isset($callback_data[1])) {
$method = "index";
} else {
$method = $callback_data[1];
}
if (!class_exists($controller)) {
throw new \Exception("Class {$controller} does not exist!");
}
if (!method_exists($controller, $method)) {
throw new \Exception("Method {$method} does not exist!");
}
$controller::$method();
}
/**
* @param $route
* @return bool
*/
private function isAssetRoute($route)
{
return (stripos($route, "/public/assets/") !== false);
}
你的問題與'javascript'或'css'標記完全無關。如果這些文件是用沒有人知道的語言編寫的,那麼您的問題仍然嚴格限於php和路由。把標籤想象成具有這些技能的人的邀請來幫助。我假設你不打電話來修理你的管道,反之亦然。 –
我不是在談論CSS或JavaScript標記,我正在討論文件,這些可以在部分中找到。 我希望如果我看內容,我看到文件的正確內容,但是,我什麼也看不見。 –
如果CSS/JavaScript專家會幫助你,假設他們不瞭解PHP?通過在您的問題上放置'css'和'javascript'標籤,您可以呼叫熟練使用該技術的人來幫助。你需要'php'的熟練程度。這就是我刪除標籤的原因。我添加了評論,以便您從現在開始可以理解並標記出您最大的興趣。 –