Я читал этот вопрос о как управлять отправкой формы в приложениях php mvc.
Я пытаюсь создать систему маршрутизации, чтобы узнать больше о MVC и php, и я хочу использовать RedBeanPHP в качестве основного ORM. Я не мастер шаблона mvc в php, поэтому у меня есть следующий код, который должен создавать экземпляр относительного контроллера при запросе URL-адреса. Может ли кто-нибудь показать мне правильную реализацию концепции без фреймворка? Другое сомнение касается RedBean. Будет ли загружаться на каждый контроллер, если я настрою его на передний контроллер?
<?php
declare( strict_types = 1 );
require_once __DIR__.'/vendor/autoload.php';
use \RedBeanPHP\R;
$dbh = R::setup();
class Router {
public static function init()
{
$uri = trim(parse_url( $_SERVER['REQUEST_URI'], PHP_URL_PATH ), '/');
if( $uri != '' ){
list( $controller, $method, $args ) = explode( '/', $uri, 3 );
$controller = ucfirst( $controller ).'Controller';
if( class_exists( $controller ) ){
if( !isset($args) ){
call_user_func([new $controller, $method]);
}
call_user_func_array( new $controller, $method, [$args] );
}
}
else{
IndexController::index();
}
}
}
class IndexController {
public static function index()
{
//include TEMPLATE_PATH.'/index.php';
echo 'Hello index';
}
}
class UserController {
public function demo()
{
//include TEMPLATE_PATH.'/test.php';
echo 'Hello demo';
}
}
?>
Я не уверен, что это правильный способ применения шаблона mvc, это также потому, что если внутри загруженного шаблона представления есть форма, я не уверен, как ею управлять, какой правильный <form action="" >
установить. Это также потому, что я буду реализовывать redbean с моделями FUSE
для проверки данных.
Controller
и функциюucfirst()
, потому что я учусь создавать простой MVC, и в каждой статье, о которой я читал, используется это соглашение об именах. Честно говоря, мне не нравится такой способ называть классы моих контроллеров, я предпочитаю использовать стандартную строчную первую букву без суффикса. Что касается маршрутизации, как я могу ее улучшить, есть ли у вас какие-либо предложения? Почему статические методы — это зло? Что касается DI, есть ли какие-либо предложения, я должен ввести redbean для каждого экземпляра контроллера? - person Oshione   schedule 05.07.2019