ホームページ >バックエンド開発 >PHPチュートリアル >独自の PHP MVC フレームワークを作成する (2)
必要なディレクトリは最初の記事で設定しました
public/index.php ファイルをエディタで開き、次のコードを記述します
<?php define(DS, DIRECTORY_SEPARATOR); define(ROOT, dirname(dirname(__FILE__))); $url = $_GET['url']; // 加载引导 require_once( ROOT . DS . 'core' . DS . 'bootstrap.php' );
次に、ブートのロードに関する文をコメントアウトし、以下の $url をエコーします
//require_once( ROOT . DS . 'core' . DS . 'bootstrap.php' );echo $url;
注: D:AppServwwwwudicsmvc
すると、何も表示されないことがわかります。
次に http://localhost/wudicsmvc/wudics
と入力しますウェブページに wudics という文字が表示されます
これは、URL パラメーターが正常に取得できることを意味し、グローバル変数として存在します。主に使用されるのは クライアントのリクエストを取得するため
どのコントローラーのどのメソッドにアクセスするかなど
http://localhost/wudicsmvc/home/index
ホームコントローラーのインデックスメソッドにアクセスするにはこのように規定できますもちろん、mvc では非常に重要な概念であるルーティング ルールを設定することもできます。 、コア ディレクトリの bootstrap.php ファイルが開きます:
<?php // 加载配置 require_once(ROOT . DS . 'cfg' . DS . 'config.php'); // 路由请求 require_once(ROOT . DS . 'core' . DS . 'route.php');2 つのファイルもロードされます。1 つは cfg ディレクトリの config.php で、もう 1 つはコア ディレクトリの Route.php です
config.php を見てください
<?php // mysql连接参数 define('DB_HOST', 'localhost'); define('DB_USER', 'root'); define('DB_PASS', '123456'); define('DB_NAME', 'transdb'); // smarty的一些常量 define('DIR_TPL', ROOT . DS . 'app' . DS . 'view' . DS . 'template_dir' . DS . 'default' . DS); define('DIR_CPL', ROOT . DS . 'app' . DS . 'view' . DS . 'compile_dir' . DS); define('DIR_CFG', ROOT . DS . 'app' . DS . 'view' . DS . 'config_dir' . DS); define('DIR_CAC', ROOT . DS . 'app' . DS . 'view' . DS . 'cache_dir' . DS); // 默认控制类方法 $default['controller'] = 'home'; $default['action'] = 'index'; // pulibc文件夹的路径,方便模板设计 define('WEBSITE', 'http://localhost'); define('WEBIMG', WEBSITE . dirname(dirname($_SERVER['PHP_SELF'])) . '/public/img/');いくつかの定数とグローバル変数、これは非常に重要です 定数とグローバル変数は単一エントリの PHP プログラムの共有リソースなので便利です
次に、route.php ファイル
<?php function callHook() { global $url; global $default; // Get the $controller $action $param $param = array(); $urlArr = explode("/", rtrim($url, "/")); $controller = array_shift($urlArr); $action = array_shift($urlArr); $param = $urlArr; if ($controller == "") { $controller = $default['controller']; $action = $default['action']; } if ($action == "") { $action = $default['action']; } // 控制类书写规则 HomeController->Index $controllerName = ucfirst($controller).'Controller'; $dispatch = new $controllerName($controller, $action); if (method_exists($dispatch, ucfirst($action))) { call_user_func_array(array($dispatch, ucfirst($action)), $param); } else { /* Error Code for Method is not exists */ die('method not exitsts.<br />'); } } // 自动加载类 function __autoload($classname) { if (file_exists(ROOT . DS . 'core' . DS . strtolower($classname) . '.class.php')) { require_once(ROOT . DS . 'core' . DS . strtolower($classname) . '.class.php'); } else if (file_exists(ROOT . DS . 'app' . DS . 'controller' . DS . strtolower($classname) . '.php')) { require_once(ROOT . DS . 'app' . DS . 'controller' . DS . strtolower($classname) . '.php'); } else if (file_exists(ROOT . DS . 'app' . DS . 'model' . DS . strtolower($classname) . '.php')) { require_once(ROOT . DS . 'app' . DS . 'model' . DS . strtolower($classname) . '.php'); } else { /* Error Code for can not find the files */ die('class not found.<br />'); } } callHook();このページでは、まず callHook と __autoload という 2 つの関数を定義し、次にページの下部に callHook() という文があり、この時点でプログラムが実行を開始します。
callHook 関数:
その機能は、上記のコントローラー、メソッド、パラメーターを見つけることです
// 控制类书写规则 HomeController->Index $controllerName = ucfirst($controller).'Controller'; $dispatch = new $controllerName($controller, $action);プログラムは __autoload メソッドを実行します。このメソッドは使用できますクラスを使用するとき、必要なファイルを自動的にロードできます
手動で要求する必要はありません。これはさまざまなクラス ライブラリに便利で、便利でトラブルフリーです。.php クラス ファイルを手動でロードする必要はありませんクラスを呼び出す前に毎回
method_exists メソッドは、このクラスにメソッドが存在するかどうかを判断します。存在する場合、call_user_func_array はメソッドを呼び出します
ここにあるのは app/controller/homecontroller.php ファイルです
<?phpclass HomeController extends Controller{ public function Index() { $user = new user(); $tpl = new tpl(); $tpl->set('name', $user->name); $tpl->render('index.html'); }}
このメソッドはユーザー クラス (モデル) と tpl クラス (ビュー) をロードします
ユーザー クラスはデータベースからデータを読み取る責任があります
tpl クラス データの表示を担当します
したがって、コントローラー クラスは、データと表示を接続して制御する役割を果たしているとも言えます。これにより、2 つが適切にバインドされ、モデルとビューが分離しました
こうすることで、独自のアイデアを実現し、php コードと html レイアウトを分離することができます
自分の便利な php フレームワークを統合できれば幸いです。皆さんも QQ グループに来てください。意見をお聞かせください。QQ グループ番号: 667110936671109366711093