Начал разбираться в MVC PHP, после множества прочитанных статей и просмотренных видео уроков накатал каркас своего приложения. (Сразу попрошу не советовать использовать готовые решение, я хочу изобрести собственный велосипед, так мне легче во всем разобраться). Схема стандартная все запросы идут на index.php, в роутере разбираю URL на controller, action, params. Ну с этим проблем нет. URL получаются такого вида: http://localhost/categories/sport, где categories - имя контроллера, а sport - action. Потом создаю второй контроллер к примеру articles, URL - http://localhost/articles/football ну и все по прежней схеме. Вопрос: как создать ссылку вида http://localhost/categories/sport/articles/football, или http://localhost/categories/sport/football. Только так чтобы не писать все в одном контроллере.
Вот класс роутера:
<?php
class Router {
protected $uri;
protected $controller;
protected $action;
protected $params;
protected $route;
protected $method_prefix;
protected $language;
public function getUri() {
return $this->uri;
}
public function getController() {
return $this->controller;
}
public function getAction() {
return $this->action;
}
public function getParams() {
return $this->params;
}
public function getRoute() {
return $this->route;
}
public function getMethodPrefix() {
return $this->method_prefix;
}
public function getLanguage() {
return $this->language;
}
public function __construct($uri) {
$this->uri = urldecode(trim($uri, '/'));
// Get defaults
$routes = Config::get('routes');
$this->route = Config::get('default_route');
$this->method_prefix = isset($routes[$this->route]) ? $routes[$this->route] : '';
$this->language = Config::get('default_language');
$this->controller = Config::get('default_controller');
$this->action = Config::get('default_action');
$uri_parts = explode('?', $this->uri);
// Get path like /lng/controller/action/param1/param2/
$path = mb_substr($uri_parts[0], 14);
$path_parts = explode('/', $path);
if(count($path_parts)) {
// Get route at first element
if(in_array(strtolower(current($path_parts)), array_keys($routes))) {
$this->route = strtolower(current($path_parts));
$this->method_prefix = isset($routes[$this->route]) ? $routes[$this->route] : '';
array_shift($path_parts);
} elseif(in_array(strtolower(current($path_parts)), Config::get('languages'))) {
$this->language = strtolower(current($path_parts));
array_shift($path_parts);
}
//Get controller - next element of array
if(current($path_parts)) {
$this->controller = strtolower(current($path_parts));
array_shift($path_parts);
}
//Get action
if(current($path_parts)) {
$this->action = strtolower(current($path_parts));
array_shift($path_parts);
}
//Get params - all the rest
$this->params = $path_parts;
}
}
public static function redirect($location) {
header("Location: $location");
exit();
}
public static function notFound() {
header('HTTP/1.0 404 Not Found');
header('HTTP/1.1 404 Not Found');
header('Status: 404 Not Found');
return true;
}
}
Виртуальный выделенный сервер (VDS) становится отличным выбором
Как на PHP сделать подсчет посещений по iP? На сайте есть задание, которое можно выполнить не более 5 раз, и нужно чтобы при входе с помощью $_SERVER["REMOTE_ADDR"];...
php artisan admin:install Copied Directory [\vendor\sleeping-owl\admin\src\migrations] To [\database\migrations] Copied Directory [\vendor\sleeping-owl\admin\public] To [\public\packages\sleeping-owl\admin] Publishing complete for tag []! [PDOException]...
Подскажите, пожалуйста, как работает рекурсия, и как написать такую функцию, чтоб она могла проходить по всему массиву и удалить определённый...