2014 年の Xinxing starphp の最初のセクションでは、エントリ ファイルと App クラス
********************** を設定します。このセクションの目的 ****************
1. まず、これから作成するフレームワークの全体的なレイアウトを統一します。設定項目やログ ファイルのロードなど、実行する必要があるいくつかのことについては後で説明します。まず、そのディレクトリ構造は次のとおりです。
2. 今日は、この star.php ファイルを作成しましょう。これは、最初に、index.php を定義する必要があります:|---------star| |------------core:核心类库| | |---------------app.php| | |---------------model.php| | |---------------controller.php| | |----------------view.php| | |-----------------fun.php| || |-------------common:函数库| |-------------class:类库| |-------------extends:其他类库| |--------------star.php||-----------app它的文件目录为| |------------遵循模块/控制器/方法的格式| |------------index.php||------------adimin|
3. 次に、App クラスを見つけるための star.php の内容を記述し、App クラスの run メソッドを呼び出してプログラムを実行します。 >4. 次に、URL の解析を完了できる App クラスを作成します。ここでは設定ファイルを設定していないため、URL は一律に PATHINFO モードを使用し、パス区切り文字は一律にスラッシュを使用します。 URL のファイル名の最後の部分は、「モジュール/コントロール」「デバイス/メソッド/パラメータ 1/値 1/パラメータ 2/値 2....」に従っているため、app.php ファイルは次のようになります。
<?php //定义它是从首页进入的define('INDEX',True);//包含该核心文件define('__ROOT__',__DIR__);include __ROOT__.'/star/star.php';
5. コア フォルダーの fun.php ファイルにコードを追加する必要もあります。これには、不正な挿入を防ぐために配列をフィルターする star_arr_safe 関数が含まれています。 :
<?php//定义版本信息define("VERSION","0.1");//控制PHP版本if(phpversion() <'5.3'){ exit("版本太低不支持");} //表示路径分隔符define("DS",DIRECTORY_SEPARATOR);//这个STAR表示我们的star目录if(!defined("STAR")){define("STAR",__DIR__);}//定义应用程序目录,if(! defined("APP")){define("APP",__ROOT__.DS."app");}if(! defined("CORE")){define("CORE",STAR.DS."core");}//导入应用程序控制文件 include STAR.DS."core".DS."app.php";//导入核心文件include CORE.DS."fun.php";$app = new App();$app->run();
<?php/***该类用于统一处理所有的信息**/if(!defined("STAR")) die("系统错误");include STAR.DS."core".DS."controller.php";class App{ //模块名 private $module = ""; //控制器 private $controller = ""; //方法名 private $method = ""; //参数名 private $param = array(); //参数个数 private $paramlength = 0; /** *用于解析控制器和方法 * */ public function __construct(){ //默认使用/来解析url $path = trim($_SERVER['PATH_INFO'],'/'); $path = explode('/',$path); var_dump($path); $paramlength =(count($path) - 3)/2; var_dump($paramlength); $this->paramlength = $paramlength; $module = array_shift($path);//模块名 $controller = array_shift($path);//控制器名 $method = array_shift($path);//方法名 var_dump($path); for($i = 0;$i <$paramlength;$i++){ $param[] = $path[2*$i + 1]; } var_dump($param); $param = star_arr_safe($param); var_dump($param); $this->param = $param; if($module ==""){$module = "index";} if($controller == ""){$controller = "Index";} if($method == ""){$method = "index";} $this->module = $module; $this->controller = $controller; $this->method = $method; //spl_autoload_register($this->loadcore); //自动根据解析的路由来执行 } /** *用于运行方法 * */ public function run(){ $controller = $this->controller; $module = $this->module; $dir = APP.DS.$module.DS."controller".DS."$controller"."Controller.php"; include "$dir"; $controllerclass = $controller."Controller"; $class = new $controllerclass(); $method = $this->method; $param = $this->param; $length = $this->paramlength; if(is_int($length) && ($length >= 1)){ $class->$method($param); }else{ $class->$method(); } } /** * * */ }
<?php/***用于过滤用户输入信息的函数*它主要是防止sql注入*也需要防范html实体*/function star_arr_safe($array){ if(is_array($array)){ $count = count($array); for($i = 0;$i< $count;$i ++){ $array[$i] = htmlspecialchars($array[$i]); $array[$i] = addslashes($array[$i]); } } return $array; }
<?php/***该类用于解析url并且根据url来执行相关的方法**/if(!defined("STAR")) die("系统错误");class Controller{ }
をクリックしてリンクを開きます。 . もちろん部分ダウンロードです。
3. このバージョンは将来の思い出として使用できます (笑)。<?phpif(!defined("STAR")) exit("Not Allowed");class MyController extends Controller{ public function index($arr){ echo "hello world"; var_dump($arr); }}