Для вашего решения вам потребуется обработать маршрутизацию. Лучше всего было бы создать простой класс маршрутизатора, который обрабатывает URI-маршрутизацию, запросы и строки запросов.
Таким образом, вы можете взять полный URI - admin/core/settings
и вызвать соответствующий контроллер и метод, вместо того, чтобы разбивать его на куски и обрабатывать его так, как вы это делали.
Предлагаемое решение не является окончательным и наиболее идеальным, но оно должно соответствовать. Существуют лучшие подходы, использующие пространства имен PHP, которые автоматически загружают файлы.
При условии, что вы добавили в .htaccess директивы для передачи URI:
<IfModule mod_rewrite.c>
RewriteEngine On
Options +FollowSymLinks -Indexes
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]
</IfModule>
Создайте класс Router
, который будет обрабатывать маршруты и инициировать классы и вызывать методы:
class Router {
public $routes = [];
public function __construct( $routes = [] ) {
$this->routes = $routes;
}
public function load( $route ) {
if ( in_array( $route, $this->routes ) ) {
if ( file_exists( $this->routes[ $route ]['file'] ) ) {
require_once $this->routes[ $route ]['file'];
$class = new $this->routes[$route]['class'];
call_user_func( array( $class, $this->routes[ $route ]['method'] ) );
}
}
}
}
Затем после запроса bootstrap. php вы можете выбрать маршрут:
<?php
require_once('../app/bootstrap.php'); //require in boostrap.php router class, you could call it there
В bootstrap. php:
require_once('Router.php'); //require the Router class
//define the routes
$routes = [
'/admin/core/settings' => [
'file' => 'Controllers/Admin/Core.php',
'class' => 'Core',
'method' => 'Settings' //i.e. that you method Settings to open the settings for the admin
] //if you are not using namespaces
];
$uri = $_SERVER['REQUEST_URI']; //take the URI
$router = new Router($routes); //instantiate the Router class
$router->load($uri); //handle the given uri
Тогда в классе Core у вас должен быть метод Settings
:
class Core {
public function __construct() {
//you could parse all requests here and pass it to the object's property to be used in other methods of the class
}
public function Settings() {
//add your code
//handle the requests, retrieve the data via model, render the view, pass the data to the view, etc
}
}
Я бы порекомендовал хотя бы рассмотреть использование пространств имен и механизм автозагрузки. См. composer .org документы для этого и прочитайте php. net о spl_autoload, spl_autoload_register и проверьте также php -fig.
Composer будет обрабатывать автозагрузку классов, поэтому вместо постоянного использования require
файлы будут загружаться автоматически, если все пространства имен верны.