しばらく前、小さなWebアプリケーションを作成するタスクに直面しました。上記のフレームワークをインストールすることはできませんでした。 私は、 MVCの原理に基づいて、独自に作成することにしました。それは、ベースに1晩かかりました。
初心者のWeb開発者にとって、これは難しいように思えるかもしれませんが、そうではないことをこの記事で明確にしようとします。
まず、要件を決定しましょう。
- MVCアプローチ
- CNC
- 使いやすさ
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からダウンロードしてください 。