2016-04-03 18 views
1

私は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にはswitchtableにはswitchが必要です。このAppが持つ他のすべての機能(ユーザーシステム、1つ)はもちろんのこと、大規模なswitch文を書く唯一の答えは?

+0

[ルーティング](https://packagist.org/search/?q=router)。 – Federkun

+0

symfonyやLaravelのような、あなたのための低レベルの詳細を扱うphpフレームワークを見てください。例えば、ルーティングなどです。 – Brice

+0

私は自分のルータを書き、書きました。私のような小さなアプリでは数時間しかかかりませんでした。 – user3822370

答えて

1

あなたの現在の苦境を理解することから、はい。あなたはいつもPHPフレームワークを使うことができます(Googleにはたくさんあります)が、既存の構造体を使いたい場合はもちろん、switch文やページの正しいモデルをロードする方法が必要です。あなたは、常にこのようなものを使用することができ

注:

<?php 

    // I assume $request is sanitized. 
    // Check to see if the class file exists. 
    if(file_exists('class-directory/' . $request . '.inc.php')) { 
     $class_name = ucfirst($request); 
     $this->scheduleTable = new $class_name; 
    } else { 
     // Show error page, the request is not valid. 
    } 

?> 

重要な注意は:複数のセキュリティのために、あなたは$ _REQUESTの代わりに$ _POST、$ _GETと$ _COOKIEを使用する必要があります。

+0

すべての '$ _REQUEST'値がPDOを使ってステートメントにバインドされている場合、どういう違いがありますか? – user3822370

+0

'$ _GET'、' $ _POST'、 '$ _COOKIE'が' $ _REQUEST'に処理される順序に応じて、値を上書きしないようにするだけです。 '$ _REQUEST'を使い続けていても、私の解決策を引き続き使用できることに注意してください。 – Technoh

関連する問題