夜のphpフレームワークを書く

Zend / Yii / CI / Kohanaなどの大きなフレームワークを使用するために、いくつかの小さな機能を記述するために、定期的にタスクが発生します。



しばらく前、小さなWebアプリケーションを作成するタスクに直面しました。上記のフレームワークをインストールすることはできませんでした。 私は、 MVCの原理に基づいて、独自に作成することにしました。それは、ベースに1晩かかりました。



初心者のWeb開発者にとって、これは難しいように思えるかもしれませんが、そうではないことをこの記事で明確にしようとします。





まず、要件を決定しましょう。





CNCを実装するには、mod_rewriteを使用します。URLは次のようになります:mysite.com/controller_name/ controller_action / param_name_1 / param_value_1 / param_name_2 / param_value_2



モデル、ビュー、コントローラーの基本クラスを作成する必要があります。

abstract class CController extends CBaseObject ... abstract class CModel extends CBaseObject ... class CView ... class CViewSmarty extends Smarty ...
      
      





すべてのリクエストはindex.phpによって処理され、設定は通常の配列としてconfig.phpに保存されます。

config.phpの一部

  $config['SYSPATH'] = "system"; $config['APPPATH'] = "application"; $config['BASEPATH'] = "/projects/savage";
      
      







クラスの自動ロードも必要です

  function autoload_classes($param) { include("config.php"); if (strtolower(substr($param, 0, 1)) == "m") { include_once ($config['APPPATH'] . "/models/" . strtolower($param) . ".php"); } if (strtolower(substr($param, 0, 1)) == "c") { $part_path = strtolower($param) . ".php"; if (file_exists($config['SYSPATH'] . "/classes/" . $part_path)) { $file = $config['SYSPATH'] . "/classes/" . $part_path; } else { $file = $config['APPPATH'] . "/controllers/" . $part_path; } include_once $file; } } spl_autoload_register('autoload_classes');
      
      







index.phpはコントローラーメソッドの呼び出しを担当し、最初のパラメーターがコントローラー識別子であるか、デフォルトのコントローラーメソッドであるかを確認します(mysite.com/mycontroller/myactionなどmysite.com/myactionのように記述できます)



コントローラーの実装に目を向けると、そのタスクはロジックの実装であり、使用する表現を決定します。

URLで使用されるメソッドの場合、接頭辞action_(ci / kohanaユーザーになじみやすい)を実行します。

  class CMain extends CController { public function action_index() { $widgets = new CWidgets(); $prm_data = array( 'widget_login' => $widgets->widget_login(), ); $view = new CView(); $view->assign($prm_data); $view->display("index"); } ...
      
      







また、データを操作する必要があります。このためにモデルを作成しますが、モデルは必ずしもデータベースで機能するとは限りませんが、配列を格納するだけで十分な場合もあります。 私の例では、通常の配列が使用されています。必要に応じて、データベースを操作できます(PDO経由)。

  class MUsers extends CModel { ... public function get_list() { for ($i = 1; $i < 6; $i++) { $this->data[] = array('id' => $i, 'login' => 'user ' . $i, 'pw' => ($i * 2 + $i)); } return $this->data; } } //!        PDO //!      IP public function check_login($params) { $prm_data = array(':id' => $params['suid'], ':ip' => $_SERVER['REMOTE_ADDR']); $data = self::fetch_all("select id from ##_log where id = :id and ip = :ip", $prm_data); if (count($data) > 0) { return TRUE; } else { return FALSE; } }
      
      







表現、表示を実装する方法は多数あり、ネイティブphpテンプレートエンジンの使用を好む人、Smartyなどを好む人がいます。

私はSmartyが好きだったので、Smatryのような基本的なプレゼンテーション方法を作りました。



フレームワークの準備は整っていますが、ブランドほど強力ではありませんが、多くのタスクに最適です。



こちらのデモを見Smartyなしダウンロードし、Smartyからダウンロードしてください



All Articles