コントローラークラスに多くのスイッチケースがあります。コントローラーでスイッチケースを減らすか、スイッチケースをより適切に処理するにはどうすればよいですか。ボタンとリンクを処理するためにスイッチケースを使用する必要がありました。工場のパターンを使用できますか? 私のコード構造を見てください:
class manageController
{
private $controller;
private $action;
public function __construct($controller,$action)
{
$this->controller=$controller;
$this->action=$action;
}
public function dispatch()
{ ... }
private function indexAction()//for index.php
{ ... }
private function managecontentAction()//for managecontent.php
{
...
if(isset($_POST['delete_page'])){
...
}elseif(isset($_POST['save_page'])){
...
}elseif(isset($_POST['reset_subject_menu'])){
...
}elseif(isset($_POST['remove_subject_menu'])){
...
}elseif(isset($_POST['insert_subject_menu'])){
...
}elseif(isset($_POST['update_subject_menu'])){
...
}elseif(isset($_GET['subject_menu_id'])){
...
}elseif(isset($_GET['action']) && $_GET['action']=='add-subject-menu'){
...
}elseif(isset($_GET['action']) && $_GET['action']=='add-page-menu'){
...
}
...
$this->render();
}
}
?>
の処理に問題がありますurl
。たとえば、入力するhttp://localhost/manage/managecontent
と読み込みは良好ですが、http://localhost/manage/managecontent/
html 読み込みを入力するcss
とファイルと画像が読み込まれません。
私のコード構造を見てくださいbootstrap
:
<?php
if(!defined('ROOT_PATH')){
define('ROOT_PATH','../');
}
require_once ROOT_PATH.'function/my_autoloader.php';
use application\controllers as controllers;
$uri=strtolower($_SERVER['REQUEST_URI']);
$actionName='';
$uriData=array();
$uriData=preg_split('/[\/\\\]/',$uri );
$actionName = (!empty($uriData[3])) ? preg_split('/[?].*/', $uriData[3] ): '' ;
$actionName =$actionName[0];
if(empty($controllerName))
die('ERROR your request page doesn\'t exist!');
else {
if(empty($actionName))
$actionName='index';
}
switch ($controllerName) {
case 'manage':
$controller = new Controllers\manageController($controllerName,$actionName);
break;
default:
die('ERROR WE DON\'T HAVE THIS ACTION!');
exit;
break;
}
// function dispatch send url to controller layer
$controller->dispatch();
?>
私の.htaccess
ファイルは:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ public/index.php [NC,L]