私はPHPとJSを使用して、ユーザー、名簿、スケジュール管理を含むスポーツ管理Webサイトを開発しています。このアプリには約15のデータベーステーブルがあり、すべて一緒に作業できます。最近、私は何か重大なことをやっていることを学びました。私は個々のPHPスクリプトを独自の「アプリ」として使っていました。PHP単一エントリーポイントアプリケーションによる複雑なリクエストの処理
例:個々のスクリプトアプリ
JS
var params = {
action : 'addGame',
date : 'someday',
hometeam : 1,
awayteam : 2
}
$.post('/php/scheduler.php', params);
PHP
class Scheduler extends TableManager{
public function addGame($date, $hometeam, $awayteam){
// do sql stuff
}
public function doAction($request){
switch($request){
case "addGame":
return $this->addGame($_REQUEST['date'], $_REQUEST['hometeam'], $_REQUEST['awayteam'];
break;
}
}
}
if(isset($_REQUEST['action'])){
$scheduler = new Scheduler();
$scheduler->doAction($_REQUEST['action']);
}
私は適切なPHPアプリケーションを書くことは、単一の "アプリ" がなければならないことを意味していることを学びましたすべてのリクエストがルーティングされます。これは問題なく、私はこれをやった - しかし、今は未知の領域に直面する。私は15台のテーブルを持っていて、それらはすべていくつかの非常に特殊な機能を持っています(すべてextend TableManager
の基本的なテーブル機能を提供していますが、不気味な複雑さを伴わずに?
例:単一エントリポイントアプリ
JS
var params = {
action : 'addGame',
table : 'scheduler',
date : 'someday',
hometeam : 1,
awayteam : 2
}
$.post('/php/app.php', params);
PHP
class App {
private $scheduleTable;
public function createTable($name){
switch($name){
case "scheduler":
$this->scheduleTable = new Scheduler();
break;
}
}
public doAction($request){
switch($request){
case "addGame":
$this->createTable('scheduler');
return $this->scheduleTable->addGame($_REQUEST['date'], $_REQUEST['hometeam'], $_REQUEST['awayteam'];
break;
}
}
}
if(isset($_REQUEST['action'])){
$app = new App();
$app ->doAction($_REQUEST['action']);
}
は今、私はすべての私のテーブルとして、複雑かつ肥大化switch文を使用して起動する必要がありTableManager
を継承し、同じ動作の多くを行いますが、hユニークな機能を提供します。受信action
にはswitch
、table
にはswitch
が必要です。このApp
が持つ他のすべての機能(ユーザーシステム、1つ)はもちろんのこと、大規模なswitch文を書く唯一の答えは?
[ルーティング](https://packagist.org/search/?q=router)。 – Federkun
symfonyやLaravelのような、あなたのための低レベルの詳細を扱うphpフレームワークを見てください。例えば、ルーティングなどです。 – Brice
私は自分のルータを書き、書きました。私のような小さなアプリでは数時間しかかかりませんでした。 – user3822370