独自の 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 はグローバル変数であり、リクエストとして使用されるパラメーターを取得するために使用されます
次に、ブートのロードに関する文をコメントアウトし、以下の $url をエコーします
//require_once( ROOT . DS . 'core' . DS . 'bootstrap.php' );echo $url;
次に、ブラウザのアドレス バーに http://localhost/wudicsmvc/ と入力します
注: 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');
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/');
次に、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 関数:
その機能は、上記のコントローラー、メソッド、パラメーターを見つけることです
// 控制类书写规则 HomeController->Index $controllerName = ucfirst($controller).'Controller'; $dispatch = new $controllerName($controller, $action);
手動で要求する必要はありません。これはさまざまなクラス ライブラリに便利で、便利でトラブルフリーです。.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

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









Laravelは、直感的なフラッシュメソッドを使用して、一時的なセッションデータの処理を簡素化します。これは、アプリケーション内に簡単なメッセージ、アラート、または通知を表示するのに最適です。 データは、デフォルトで次の要求のためにのみ持続します。 $リクエスト -

PHPクライアントURL(CURL)拡張機能は、開発者にとって強力なツールであり、リモートサーバーやREST APIとのシームレスな対話を可能にします。尊敬されるマルチプロトコルファイル転送ライブラリであるLibcurlを活用することにより、PHP Curlは効率的なexecuを促進します

Laravelは簡潔なHTTP応答シミュレーション構文を提供し、HTTP相互作用テストを簡素化します。このアプローチは、テストシミュレーションをより直感的にしながら、コード冗長性を大幅に削減します。 基本的な実装は、さまざまな応答タイプのショートカットを提供します。 Illuminate \ support \ facades \ httpを使用します。 http :: fake([[ 'google.com' => 'hello world'、 'github.com' => ['foo' => 'bar']、 'forge.laravel.com' =>

顧客の最も差し迫った問題にリアルタイムでインスタントソリューションを提供したいですか? ライブチャットを使用すると、顧客とのリアルタイムな会話を行い、すぐに問題を解決できます。それはあなたがあなたのカスタムにより速いサービスを提供することを可能にします

記事では、PHP 5.3で導入されたPHPの後期静的結合(LSB)について説明し、より柔軟な継承を求める静的メソッドコールのランタイム解像度を可能にします。 LSBの実用的なアプリケーションと潜在的なパフォーマ

この記事では、フレームワークにカスタム機能を追加し、アーキテクチャの理解、拡張ポイントの識別、統合とデバッグのベストプラクティスに焦点を当てています。

PHP開発でPHPのCurlライブラリを使用してJSONデータを送信すると、外部APIと対話する必要があることがよくあります。一般的な方法の1つは、Curlライブラリを使用して投稿を送信することです。
