Я не думаю, что есть лучший способ, но это не значит, что его нет.
Просто пара замечаний после прочтения вашего вопроса: 1) Используйте файлы-обертки для всехвашей информации заголовка.Итак, в начале вашей страницы поместите:
require_once('package.php'); // that's what I call mine
Затем в пакете я получу:
require_once('session.start.php');
require_once('db.con.php');
Таким образом, все ваши страницы обращаются к одной и той же вещи.Если вам когда-либо понадобится изменить его, это будет намного проще.
Существует разница в скорости между require_once, include_once, include и require.Я не знаю, насколько это важно.Фреймворки включают в себя более 60 файлов при создании страницы, поэтому я всегда считал, что это не так уж плохо.
Информация о сеансе хранится в папке на вашем сервере.PHP по умолчанию это / tmp (который вы должны изменить на личную папку / недоступен через Интернет).
Убедитесь, что вы проверяете любую информацию, отправленную в AJAX.Помните, что он похож на свою собственную веб-страницу, поэтому любые разрешения или конфиденциальная информация базы данных должны быть одинаково защищены.
"Я думаю, что я могу использовать один ajax-страницу и просто включить кучуcase case, но все еще задаюсь вопросом, есть ли лучший способ. "
Шаблон контроллера довольно хорош для такого типа вещей.Наличие нескольких регистров в одном файле сложно для вашего обслуживания.Когда вы переключитесь на файлы, в которых есть только 1 или 2 функции, ваша жизнь станет намного проще.
В зависимости от размера вашего проекта, вы можете захотеть реализовать фреймворк.Проверьте рамки MVC.Если я не реализую фреймворк, я все равно реализую шаблон контроллера.
Я поднял это из своего блога.То, что я сейчас использую, даже не выглядит так, но оно началось здесь:
На уровне презентации я определяю, какие элементы я хочу реализовать.Для каждого элемента, который я хочу реализовать, я запускаю контроллер, например, так:
$controller = new Controller();
$context = $controller->getContext();
$context->addParam('action', 'login');
$template->setContent( $controller->process() );
Я использую контроллер из объектов, шаблонов и практики PHP, 3-е издание, автор Matt Zandstraс моими собственными модификациями.
Вот что происходит:
- Мой уровень представления получает новый объект контроллера.
- Конструктор объекта Controller автоматически создает новый объект CommandContext.
- CommandContext автоматически будет загружать переменные запроса в качестве параметра, поэтому мне даже не нужно беспокоиться о данных формы, пока я не доберусь до уровня логики и не должен проверить иобработайте его.
- На уровне представления я загружаю любые дополнительные параметры контекста (или информацию, которую я хочу передать контроллеру), включая самое важное, действие, которое я хочу выполнить с помощьюКонтроллер.
- Чтобы передать информацию, я вызываю $ controller-> process ().В слое логики я могу использовать по умолчанию «выполнить» или сделать другую команду.Итак, на уровне Presentation я установил действие «Login», которое заставляет открываться страницы команды входа в систему и представления входа в систему, и команда по умолчанию выполняется, но это может быть что угодно.
- Когда я вызываю process, это вызывает CommandFacotry.CommandFactory собирается сначала инициировать новый дочерний объект Template, такой как блок div боковой панели или контекст основного тела.Это делается с помощью необязательного флага, который я могу передать контроллеру.
- Затем CommandFactory откроет командный файл и передаст шаблон и контекст в виде объектов на уровень логики.
abstract class Command {
}
class CommandContext {
private $params = array();
private $error = "";
function __construct(){
$this->params = $_REQUEST;
}
function addParam( $key, $val ){
$this->params[$key] = $val;
}
function get( $key ){
return $this->params[$key];
}
function issetCheck( $key ){
if( ! empty( $this->params[$key] ) ){
return true;
}
return false;
}
function setError( $error ){
$this->error = $error;
}
function getError(){
return $this->error;
}
}
class CommandNotFoundException extends Exception { }
class CommandFactory {
private static $dir = 'include/classes/command/';
static function getCommand( $action = 'Default', $flag = 0 ){
switch( $flag ){
case 1:
$template = new TemplateQuickViewOnly();
break;
case 2:
$template = new TemplateQuickViewToggle();
break;
default:
$template = new TemplateMainBodyOnly();
break;
}
if( preg_match ( '/\W/', $action ) ){
throw new Exception("illegal characters in action");
}
$class = UCFirst(strtolower($action))."Command";
$file = ROOT_PATH."".self::$dir."{$class}.php";
if( ! file_exists( $file ) ){
throw new CommandNotFoundException( "could not find '$file'" );
}
include_once( $file );
if( ! class_exists($class) ){
throw new CommandNotFoundException( "no '$class' class located" );
}
$cmd = new $class( $template );
return array( $cmd, $template );
}
}
class Controller {
private $context;
function __construct(){
$this->context = new CommandContext();
}
function getContext(){
return $this->context;
}
function process( $method = 'execute', $flag = 0 ){
list( $cmd, $template ) = CommandFactory::getCommand( $this->context->get('action'), $flag );
if( ! $cmd->$method( $this->context ) ){
// handle failure
// $template->setMessage( UCFirst($this->context->get('action')).' failed to execute.');
return $template->getMessage();
}else{
// success dispatch view
return $template->getMessage();
}
}
}
Уровень логики находится в фиксированном каталоге.Экземпляр объекта уже установлен на уровне контроллера, что означает, что конструктор был запущен.Кроме того, уровень контроллера уже вызвал метод «execute» (по умолчанию) или другой метод, такой как «getLoginForm».Также обратите внимание, что когда контроллер вызывает метод «execute», он также передает CommandContext методу, поэтому у нас есть кое-что для работы.
class LoginCommand extends Command {
public function __construct( ){ }
function execute ( CommandContext $context ){
if( $context->get('login_user_name') == 'demo' ){
$this->view->setMessage('Success is true!');
return true;
}
return false;
}
function getLoginForm( CommandContext $context ){
$this->view->setMessage('Second sucess is even more true!');
return true;
}
}