ホームページ バックエンド開発 PHPチュートリアル php框架开发2(SPL库和controller)

php框架开发2(SPL库和controller)

Jun 13, 2016 am 10:36 AM
controller name path this

php框架开发二(SPL库和controller)

根据上话的目录结构(如果不清楚的可以看上一篇)。我在simple文件夹内新建了一个simple.php.

<p>require 'includes/exceptions.php';require 'includes/autoloader.php';session_start();</p><p>//$view = new view();lib::set_item('controller' , new controller());lib::get_item('controller' , lib::PERSIST_STORGE)->render();//$content = $view->finish();</p>
ログイン後にコピー

这一章主要是讲SPL,所以我们只看第二行的autoloader.php.当我们在index.php中加入

require 'simple/simple.php';
ログイン後にコピー

之后。

我们看一下autoloader.php的源码

<?phpclass autoloader{		public static function includesautoloader($class){		$path = defined('SIMPLE_PATH') ? SIMPLE_PATH : $_SERVER['DOCUMENT_ROOT'];		$file_name = $path . '/includes/' . $class . '.php';		if(is_readable($file_name))			require $file_name;	}		public static function modulesautoloader($class){		$path = defined('SIMPLE_PATH') ? SIMPLE_PATH : $_SERVER['DOCUMENT_ROOT'];		$file_name = $path . '/modules/' . $class . '.php';		if(is_readable($file_name))			require $file_name;	}		public static function controllerautoloader($class){		$path = defined('SIMPLE_PATH') ? SIMPLE_PATH : $_SERVER['DOCUMENT_ROOT'];		$file_name = $path . '/controller/' . $class . '.php';		if(is_readable($file_name))			require $file_name;	}}spl_autoload_register('autoloader::includesautoloader');spl_autoload_register('autoloader::modulesautoloader');spl_autoload_register('autoloader::controllerautoloader');
ログイン後にコピー


这个类都是静态方法,当引用这个PHP文件后,程序会自动载入这三个文件夹下的内容,这样我们不用重复去required 或include。如果对SPL有不了解的,可以直接去百度,这里只是告诉大家,这个SPL作用相当广。

然后在includes文件夹内新建一个lib.php

<?phpclass lib{		const SETTING_ARRAY = true;	const PERSIST_STORGE = false;		public static function set_item($name , $value , $is_array = false){		if($is_array){			$_SESSION[$name]   = array();			$_SESSION[$name][] = $value;		}		else{			$_SESSION[$name] = $value;		}	}		public static function get_item($name , $persist = true){		$result = null;		if(isset($_SESSION[$name])){			$result = $_SESSION[$name];		}		if(!$persist){			unset($_SESSION[$name]);		}		return $result;	}		public static function sendto($url = ''){		if(empty($url)){			$url  = '/';		}		die(header('Location:' . $url));	}}
ログイン後にコピー

这个类目前只用于设置SESSION相关的内容。

当执行到lib::set_item('controller' , new controller());时,这里新建了一个控制器对象,并对象存入SESSION中。

controller.php

<?phpclass controller{	//URL部分	protected $parts;	//方法参数	protected $params;		public function __construct(){		$this->parts = array();		$this->analysis();	}		public function analysis(){		$path_info = $_SERVER['PATH_INFO'];		if(substr($path_info , 0 , 1) == '/'){			$path_info = substr($path_info , 1);		}		$parts = explode('/' , $path_info);		if(empty($parts[0]))  $parts[0] = 'index';		if(empty($parts[1]))  $parts[1] = 'demo';				$this->parts = $parts;		array_shift($parts);		array_shift($parts);		$this->params = $parts;	}		public function render(){		if(!class_exists($this->parts[0])){			throw new ControllerDoesntExistsException($this->parts[0] . ' not exists!');		}		if(!method_exists($this->parts[0] , $this->parts[1])){			throw new ActionDoesntExistsException($this->parts[0] . 'of ' . $this->parts[1] . ' not exists!');		}				$new_controller = new $this->parts[0];		$called = call_user_func_array(array($new_controller , $this->parts[1]) , $this->params);		if($called === false){			throw new ActionFailedException($this->parts[0] . 'of ' . $this->parts[1] . ' failed to excute property!');		}	}}
ログイン後にコピー


这个类只用PATH_INFO模式来获取调用的控制器和ACTION,并将参数传递到相应的ACTION方法里。当controller初始化之后,会自动分析PATH_INFO的内容,

lib::get_item('controller' , lib::PERSIST_STORGE)->render();

然后调用render()就会在相应的控制器目录找到控制器和ACTION。

例如我在controller文件夹内新建一个index.php

<?phpclass index{		public function demo(){		echo "sdfsdf";	}}
ログイン後にコピー

那么执行http://localhost/index.php/index/demo就会输出"sdfsdf";(这是我的本地路径)。

 

以上代码难度不高,如果没有看懂的同学,请Q我,也可以去PHP官网上去查找相应函数的用法。

下一节相会对视图作一个简单的介绍。

 

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

SpringBootがコントローラーをスキャンできない問題の解決方法 SpringBootがコントローラーをスキャンできない問題の解決方法 May 14, 2023 am 08:10 AM

SpringBoot の初心者がプロジェクトを作成するとき、一連の問題 1.2.3.4.5.6 についてコントローラーをスキャンできません。別の方法は、開始時に @ComponentScan(basePackages={"xxx.xxx.xx","xxx.xxx") を追加することです。サービス クラス) .xx”}) はパッケージの完全修飾名であり、複数の SpringBoot カスタム コントローラーに使用できます。スタートアップ クラスとカスタム コントローラー パッケージが同じディレクトリにありません。 application.java の公式推奨配置

Linux システムの PATH 環境変数を設定する手順 Linux システムの PATH 環境変数を設定する手順 Feb 18, 2024 pm 05:40 PM

Linux システムで PATH 環境変数を設定する方法 Linux システムでは、PATH 環境変数を使用して、システムがコマンド ラインで実行可能ファイルを検索するパスを指定します。 PATH 環境変数を正しく設定すると、任意の場所でシステム コマンドやカスタム コマンドを実行できるようになります。この記事では、Linux システムで PATH 環境変数を設定する方法と詳細なコード例を紹介します。現在の PATH 環境変数を表示する ターミナルで次のコマンドを実行して、現在の PATH 環境変数を表示します: echo$P

SpringBootの複数のコントローラにURLプレフィックスを追加する方法 SpringBootの複数のコントローラにURLプレフィックスを追加する方法 May 12, 2023 pm 06:37 PM

場合によっては、サービス コントローラーのプレフィックスが一貫している場合があります。たとえば、すべての URL のプレフィックスは /context-path/api/v1 であり、一部の URL には統一されたプレフィックスを追加する必要があります。考えられる解決策は、サービスのコンテキスト パスを変更し、コンテキスト パスに api/v1 を追加することです。グローバル プレフィックスを変更すると、上記の問題を解決できますが、欠点もあります。URL に複数のプレフィックスがある場合、たとえば、 URL にはプレフィックスが必要です。api/v2 の場合は区別できません。サービス内の一部の静的リソースに api/v1 を追加したくない場合は、区別できません。以下では、カスタム アノテーションを使用して、特定の URL プレフィックスを均一に追加します。 1つ、

パス環境変数を設定する方法 パス環境変数を設定する方法 Sep 04, 2023 am 11:53 AM

パス環境変数を設定する方法: 1. Windows システムでは、[システムのプロパティ] を開き、[プロパティ] オプションをクリックし、[システムの詳細設定] をクリックし、[システムのプロパティ] ウィンドウで [詳細] タブを選択します。 「環境変数」ボタンをクリックし、「パス」を見つけてクリックして編集し、保存します。 2. Linux システムの場合は、ターミナルを開き、bash 構成ファイルを開き、ファイルの最後に「export PATH=$PATH: file path」を追加します。ファイルを保存して保存します; 3. MacOS システムの場合、操作は上記と同じです。

php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 Jun 13, 2016 am 10:23 AM

php提交表单通过后,弹出的对话框怎样在当前页弹出php提交表单通过后,弹出的对话框怎样在当前页弹出而不是在空白页弹出?想实现这样的效果:而不是空白页弹出:------解决方案--------------------如果你的验证用PHP在后端,那么就用Ajax;仅供参考:HTML code

Linux で PATH 環境変数を正しく設定する方法 Linux で PATH 環境変数を正しく設定する方法 Feb 22, 2024 pm 08:57 PM

Linux で PATH 環境変数を正しく設定する方法 Linux オペレーティング システムでは、環境変数はシステム レベルの構成情報を保存するために使用される重要なメカニズムの 1 つです。このうち、PATH 環境変数は、システムが実行可能ファイルを検索するディレクトリを指定するために使用されます。 PATH 環境変数を正しく設定することは、システムの正常な動作を保証するための重要な手順です。この記事では、Linux で PATH 環境変数を正しく設定する方法と、具体的なコード例を紹介します。 1. 現在の PATH 環境変数を確認し、ターミナルに次のコマンドを入力します。

Javaでパス環境変数を設定する方法 Javaでパス環境変数を設定する方法 Nov 15, 2023 pm 01:20 PM

設定手順: 1. Java インストール ディレクトリを見つけます; 2. システム環境変数設定を見つけます; 3. 環境変数ウィンドウで「Path」という名前の変数を見つけて編集ボタンをクリックします; 4. ポップアップ編集環境で変数ウィンドウで、「新規」ボタンをクリックし、ポップアップダイアログボックスに Java のインストールパスを入力します; 5. 入力が正しいことを確認した後、「OK」ボタンをクリックします。

Linux における PATH 環境変数の役割と重要性 Linux における PATH 環境変数の役割と重要性 Feb 21, 2024 pm 02:09 PM

「Linux における PATH 環境変数の役割と重要性」 PATH 環境変数は、Linux システムの非常に重要な環境変数の 1 つで、システムが実行可能プログラムを検索するディレクトリを定義します。 Linuxシステムでは、ユーザーがターミナルにコマンドを入力すると、環境変数PATHに設定されているディレクトリを1つずつ検索し、コマンドの実行ファイルが存在するかどうかを確認し、見つかった場合は実行します。それ以外の場合は、「commandnotfound」というプロンプトが表示されます。 PATH 環境変数の役割: 簡略化

See all articles