TP3.1版本下利用composer的自動載入解耦MVC初始化web專案
一. composer自動載入函式庫
很多人說TP框架很low,明明是面向過程的思想非要搭建一個MVC架構。但是不可否認的是,在天朝的phper中,TP作為phpweb開發的先驅者留下了大量歷史問題。。當然,它的簡單易用以及文件的極度完善和php這門類似於粘合劑的語言配合的天衣無縫,可能是寫php寫多了,解決問題總想著走捷徑,重構什麼的是不可能的,這輩子不會去重構程式碼的。
很遺憾的是,有大量專案使用的TP版本是在3.2以前的,這意味著什麼呢,沒有名稱空間,需在例項化名稱空間定義的類之前匯入類庫檔案。不過由於composer一統php界的趨勢,我們即便再落後的框架也能享受一下被統治的快感。。可以簡單理解composer的作用類似於require和include函式,按照composer.json裡的規範自動載入需要包括的檔案。
我們可以在compoer.json檔案裡進行如下配置:
"autoload": {
"psr-4": {
"Yujie\\": "Test"
}
},
接著我們執行compoer update, 然後再在根目錄下建立Test目錄作為我們的基礎類庫目錄,就可以解耦出Model層和Logic層在這個資料夾裡了,在裡面的php檔案上定義好對應目錄的名稱空間namespace Yujie… 我們在Action或者其他地方呼叫的時候只需要new Test… 就可以了。總的來說composer提供了psr-0 psr4標準,以及別名匯入,以及目錄掃描等幾種實現自動載入的方式,都是通過spl_autoload_register實現。如果有想具體研究的同學可以參考
二. Action程式碼初始化
這裡就直接上乾貨了,一個TP下的web的控制器程式碼應該包括:初始化使用者驗證、index初始化頁面渲染、增刪改ajax操作,那麼,簡單地可以給出初始化程式碼如下:
<?php
class TestAction extends Action {
//初始化使用者驗證
public function __construct() {
parent::__construct ();
}
//index初始化頁面渲染
public function index() {
if(IS_AJAX){
$this->_ajax();
return;
}
$this->display('index');
}
//增刪改ajax操作
private function _ajax(){
$action = I('action','');
switch($action){
case 'add':
$this->_add();
break;
case 'update':
$this->_update();
break;
case 'del':
$this->_del();
break;
}
}
//新增
private function _add(){
}
//更新
private function _update(){
}
//刪除
private function _del(){
}
}
三.Model和Logic搭建初始化
文章開頭我們已經搭建了自己在根目錄的底層資料夾Test, 我們可以繼續新建子資料夾Logic和Model,分別新建Logic.php和Model.php檔案,以Model為例:
<?php
namespace Yujie;
//定義底層Model抽象類,定義庫表以及一些查詢的基本方法
abstract class Model
{
protected $dbMaster = '';
protected $dbSlave = [''];
protected $tableName;
protected $prefix = '_';
protected static $_instances = [];
protected $tableObject;
protected $isMaster = false;
}
四.小結
本來php一個數組打天下已經很無恥了,現在composer又給php的架構提供了更規範的解決方式。不得不說php是世界上最好的語言(逃)~
相關推薦
TP3.1版本下利用composer的自動載入解耦MVC初始化web專案
一. composer自動載入函式庫 很多人說TP框架很low,明明是面向過程的思想非要搭建一個MVC架構。但是不可否認的是,在天朝的phper中,TP作為phpweb開發的先驅者留下了大量歷史問題。。當然,它的簡單易用以及文件的極度完善和php這門類
windows下mysql 5.7.20解壓版初始化配置及修改root密碼
(1)解壓壓縮包,執行cmd進入mysql資料夾bin目錄下執行:mysqld --initialize-insecure --basedir="E:\軟體研發\mysql\mysql-5.7.20-winx64_1" -- datadir="E:\軟體研發\mysql\mysql-5.7.20-winx64
Windows Server2012R2+SQL Server 2017 Express版本下,每日自動備份數據庫的操作實踐筆記
cmd databases AS 如何 ups 執行 tom ack 近日 近日由於服務器問題,進行了一次數據庫遷移。遷移時發現SQL Server 2017 Express版本是免費的,可以滿足我的需要,就拋棄了原來的那啥版本的SQL Server 2008 r2直接使用
retrofit+rxjava+recyclerview+下拉重新整理+自動載入更多
安卓開發過程中,網路請求與下拉重新整理分頁列表的控制元件幾乎可以說是必不可少的,但是每次開發一款產品都要重新開發,肯定是不可取的,那麼最好是可以自己整理一個開發框架,那麼以後開發,直接引入專案即可 網路框架的封裝,從httpclient,到xutils,再到volley
Composer自動載入機制原始碼剖析
1、autoload.php 要使用Composer的自動載入,首先需要引入該檔案 <?php // autoload.php @generated by Composer // 引入au
eclipse下利用mavan自動部署
maven除了作為jar包的管理工具之外還有很強大的編譯、部署等功能,下面介紹下如何在eclipse中利用maven來自動部署J2EE專案到Tomcat,避免不斷的手動重啟Tomcat,部署,使用maven一下就可以搞定。 首先,在tomcat安裝目錄(可以是本機也可以是遠
如何在WIN8.1版本下搭建JAVA環境
樓主買的電腦是HP15-xxxxx,由於電腦只能裝WIN8.1系統,所以很多軟體無法相容,而且如果系統軟體在未註冊狀態下,會出現各種卡頓、閃退以及提醒註冊,所以這裡提醒各位在選擇JDK時要注意版本問題,在電腦配置允許的情況下,儘量安裝最新版本 圖為樓主安裝的JDK,之前嘗試
laravel框架關鍵技術解析03-2 composer自動載入
在laravel框架中,通過sql_autoload_register()實現類自動載入函式的註冊。sql_autoload_register自動載入的函式佇列中包含了兩個類的自動載入函式。 一個是composer生成的基於PSR規範的自動載入函式 另一個是laravel框架核心別名
android 接支付寶在4.1版本下報java.security.spec.InvalidKeySpecException: java.lang.RuntimeException: error:0D
今天專案要接入支付寶,心想也就5分鐘的事,沒想到執行起來它就掛,因為之前在上家公司專案也接過,而且接的很順利,沒想到今天接下就報錯: 錯誤日記如下: java.security.spec.Invali
Ubuntu下利用Mono,Jexus搭建Asp.Net(MVC) Web伺服器
最近在Ubuntu上搭建了Asp.Net的Web伺服器,其中遇到很多問題,整理一下思路,以備後用。 搭建環境以及配套軟體 安裝Mono cd /downloads wget http://download.mono-project.com/sources/mono/mono-3.0
關於並發場景下,通過雙重檢查鎖實現延遲初始化的優化問題隱患的記錄
ron href 修飾符 屬性 tin 記錄 targe turn 優化問題 首先,這個問題是從《阿裏巴巴Java開發手冊》的1.6.12(P31)上面看到的,裏面有這樣一句話,並列出一種反例代碼(以下為仿寫,並非與書上一致): 在並發場景下,通過雙重檢查鎖(do
spring MVC初始化過程學習筆記1
load cati 過程 mage 筆記 ngx 名稱 spring -s 如果有錯誤請指正~ 1.springmvc容器和spring的關系? 1.1 spring是個容器,主要是管理bean,不需要servlet容器就可以啟動,而springMVC實現了servl
JAVA類的載入、連線與初始化
JAVA類的載入、連線與初始化 類的宣告週期總共分為5個步驟1、載入2、連線3、初始化4、使用5、解除安裝 當java程式需要某個類的時候,java虛擬機器會確保這個類已經被載入、連線和初始化,而連線這個類的過程分為3個步驟 1、 載入:查詢並載入這個類的二進位制資料 類的
Java學習——類的載入、連線和初始化
JVM和類 當呼叫java命令執行某個java程式時,該命令將會啟動一個java虛擬機器程序,同一個JVM裡的所有執行緒、所有變數都處於同一個程序裡,他們都使用該JVM程序的記憶體區。 當系統出現以下幾種情況時,JVM程序將被終止。 ->程式執行到最後正
【C++】利用建構函式對類物件進行初始化
一、物件的初始化 每一個物件都應當在它建立之時就有就有確定的內容,否則就會失去物件的意義。 class Time { int hour = 0; int min = 0; int sec = 0; }; 這種是錯誤的,類並不是一個實體,並不佔儲存空間,顯然無處容納
虛擬機器類載入機制(七)——類載入的過程(初始化)
類初始化時類載入過程的最後一步,前面的類載入過程中,除了在載入階段(類載入過程的一個階段)應用程式可以通過自定義類載入器參與之外,其餘動作完全由虛擬機器主導和控制。到了初始化階段,才真正開始執行類中定義的java程式程式碼。 在準備階段,變數已經賦過一次系統要求的初始值,而
使用docker容器化web專案(windows下以及centos下)
docker安裝 選擇 DockerToolbox-18.03.0-ce下載, 安裝完成後點選 Docker QuickStart 圖示來啟動 Docker Toolbox 終端 centos下安裝: 安裝一些必要的系統工具:
當一個類被載入時成員的初始化順序
當一個類因為例項化被載入時,其成員的初始化順序是什麼呢? 先看下面這段程式碼: class Fsx{ public Fsx(){ System.out.println("Fsx無參構造器初始化了"); } public Fsx(
【JVM】類載入、連線和初始化過程
程式執行時,載入類主要經過3個階段分別是類的載入,連線和初始化。分別介紹一下這三個過程。 一、載入 類的載入指的是將類的.class檔案中二進位制資料讀入到記憶體中,將其放在執行時資料區的方法區內,然後在堆區建立一個 java.lang.Class物件
如何利用自己的電腦做伺服器釋出tomcat的WEB專案供外網訪問
http://blog.csdn.NET/chenkeqin_2012/article/details/14109621 http://wenku.baidu.com/link?url=vQB50Tkc0ic8KdhrQfOoHk9mjjodCQ12f95itRUjFOw8Yoh7NHSi4KMTjh6z