thinkphp_3.2.1

心得體會:多理解編程思想、多查閱api文檔、項目架構、如何設計php

想一想以前的學習方法簡直太死板了,眼見不開闊,跟牛人接觸的太少了,本身悶葫蘆寫的亂七八糟!!重要的是眼見思想,有了總體的思路之後其餘東西均可以查閱!html

 

zend studio的安裝,直接在官網上下載,破解註冊碼方法見網盤安裝包mysql

1.使用框架sql

在http://www.thinkphp.cn/下載須要框架。thinkphp

在zend studio下建立localphpproject 文件-》保存地址爲AppServ\www\project2(這樣能夠用localhost訪問)-》刪除index.php文件-》將下載的框架文件複製到項目裏面(這裏會string.class會報錯,直接把string 改革名字就行)數據庫

導入項目:import->general->existing projects into workspaceapache

瀏覽器訪問:http://localhost:8080/project2/demo1_thinkphp_3.2.1/編程

 

報錯: overlaps the location of another project: 'xxxx'api

建立工做路徑的時候要和建立localphp project文件保存的文件路徑一致數組

 

2.模塊化配置前臺和後臺

先在index.php下定義應用目錄做爲應用程序入口(前臺嗎?)-》打開網頁刷新-》點擊編輯器刷新

// 定義應用目錄
define('APP_PATH','./WeiBo/');

在生成的weibo目錄下新建文件夾Admin->直接將Home文件夾複製再更名就能夠了

再將Admin 下IndexController.class.php的命名空間改成

Admin\Controller

 

<?php
// 本類由系統自動生成,僅供測試用途
namespace Admin\Controller;
use Think\Controller;
class IndexController extends Controller {
    public function index(){
	echo "houtai ";

    }
}

 

admin做爲後臺?home做爲前臺?

這樣就實現了先後臺模塊化,公共使用核心配置文件

3.導入亂碼

properties->resource->other->Utf-8

 

4.url用戶密碼傳遞實例

如何調用操做:pathinfo:localhost/demo39/index.php/模塊/控制器/操做

eg.

UserController.class

 

public function user($user,$pass){
      
        echo 'user';
      
    }

 

 

 

url傳遞值

http://localhost:8080/project2/demo1_thinkphp_3.2.1/index.php/Home/User/user/user/admin/pass/123


或者

http://localhost:8080/project2/demo1_thinkphp_3.2.1/index.php?m=Home&c=User&a=user&user=leo&pass=123

 

5.URL重寫(參看手冊:部署-》URL重寫)

 

能夠經過URL重寫隱藏應用的入口文件index.php,下面是相關服務器的配置參考:

[ Apache ]

  1. httpd.conf配置文件中加載了mod_rewrite.so模塊
  2. AllowOverride None 將None改成 All
  3. 把下面的內容保存爲.htaccess文件放到應用入口文件的同級目錄下
 
  1. <IfModule mod_rewrite.c>
  2. RewriteEngine on
  3. RewriteCond %{REQUEST_FILENAME} !-d
  4. RewriteCond %{REQUEST_FILENAME} !-f
  5. RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
  6. </IfModule>

 

6.沒法啓動服務器界面???

services.msc中apache stop->start

 

7.沒法鏈接數據庫??

這裏真是血與淚的教訓啊!

 

 'DB_HOST'=>'localhost',  這裏不能寫端口啊!!!

 

8.加入調試分析

Common/Conf/config.php

  //頁面TRACE
    'SHOW_PAGE_TRACE'=>true,
    
   
9.數據庫的鏈接配置

數據庫及數據庫裏面的表都要實現創建好,而後纔在zend裏面配置鏈接

url:localhost/phpMyadmin

(1)數據庫的全局化定義

Common/Conf/config.php

兩種不一樣方式

 

//mysql全局定義
        'DB_TYPE'=>'mysql',
        'DB_HOST'=>'localhost',
        'DB_USER'=>'root',
        'DB_PWD'=>'123456789',
        'DB_PORT'=>'3306',
        'DB_NAME'=>'thinkphp',
        'DB_PREFIX'=>'think_',
 //PDO專用定義
    'DB_TYPE'=>'pdo',
    'DB_USER'=>'root',
    'DB_PWD'=>'123456789',
    'DB_PREFIX'=>'think_',  //表前綴,在數據庫中代表是這樣的 : think_user
    'DB_DSN'=>'mysql:host=localhost;dbname=thinkphp;charset=UTF8',

//配置的時候就已經選擇了鏈接的數據庫名稱和創建的表前綴,固然這都須要在數據庫裏面建立好

 

 

(2)鏈接

Home/Controller/UserController.class

對應四種方法

 

public function model(){
         //建立model基類,傳遞user表,think_user
         //Model能夠傳遞三個參數:表名、表前綴、數據庫信息
       (1) //$user=new Model('User');  //鏈接數據庫
       (2)// $user=M('User');  //推薦
       (3) //$user=new UserModel();
       (4)// $user=D('User');  //支持跨模塊實例化:Admin/User

 

 

 

第三種方法在Home/Model建立UserModel.class.php

 

<?php
namespace Home\Model;

use Think\Model;
class UserModel extends Model{
 /*    //更改表前綴
    protected  $tablePrefix='tp_';
     //不包含前綴的數據表名稱
     protected $tableName='abc';
     //更改前綴加表名
     protected  $trueTableName='tp_abc';
      */
    
    public  function __construct(){
        parent::__construct();
        echo '\home';
        
    }
}

 

 

 

 

 

10.sql

(1)查詢

字符串

M爲沒有前綴的數據表名

$user=M('User');
       //字符串查詢
       //var_dump($user->where('id =1 and user="蠟筆小新"')->select());

索引數組做爲條件查詢

 

/*  $condition['id']=1;
       $condition['user']='蠟筆小新';
       $condition['_logic']='or';
       var_dump($user->where($condition)->select()); */

 對象查詢,在PHP根目錄下尋找內置類

 

 

$condition=new \stdClass();
      $condition->id=1;
      $condition->user='蠟筆小新'; 
  var_dump($user->where($condition)->select());

 

(2)表達式查詢

 

eg.

 

(3)快捷查詢

(4)區間查詢

(5)組合查詢

(6)統計查詢

(7)動態查詢

數據表的導入導出

 

12.SQL連貫操做(大概就是php語句下的sql語句查詢)

這些語句都要在配置好數據庫以後入口文件的Home/User/model方法下寫

能夠在開發手冊 模型-》連貫操做下查到

 


13.CURD操做

(1)用到靜態html文件,安裝aptana插件?

http://mrthink.net/zend-studio-aptana-tips/

 

(2)數據建立

在工程文件下新建index.html文件

<meta charset="UTF-8">
<form method="post" action="http://localhost:8080/project2/demo1_thinkphp_3.2.1/Home/User/create">
<p>標誌:<input type="text" name="name"/></p>
<p>標題:<input type="text" name="title"/></p>
<input type="submit" value="提交"/>

</form>

注意默認提交方法爲post,若爲get則接收方式有差別,action指向接受數據建立數據的方法中

 

Home/User/create方法:

/**
      * 數據建立,數據提交的結果就是提交的POST的鍵值對
      */
     public function create(){
         $user=M('category');  //除去前綴外的名字
         //爲何須要User來進行create?並非數據庫裏面的數據啊
         var_dump($user->create()); //經過表單提交的時候默認已經構造好了一個$data對象,也能夠本身手動建立
         $user->add();
         
         
     }

create()爲建立數據源,這裏是直接接受post提交過來的數據,是一個數組,可是尚未添加到數據庫,這裏還有其餘幾種建立數據源的方式,在api文檔中能夠查到。

add()是將數據保存到數據庫。

tips:

接受post提交的數據對象

       $data['user']=$_POST['user'];

按必定規則獲取日期數據

$data->date=data('Y-m-d H:i:s');

 

若index.html文件改成get方式提交數據,由於默認是post方式,因此在接收時須要作以下改變


         var_dump($user->create($_GET));

支持一系列連貫操做

 

(3)數據寫入

使用add方法

若是在add以前已經建立數據對象的話(例如使用了create或者data方法),add方法就不須要再傳入數據了。

 

支持一系列的連貫操做,來對所寫數據加入限制條件

 

(4)數據讀取

 

讀取中find()和select()方法有何不一樣?

find 方法:查詢符合條件的第一條數據。
select 方法:查詢符合條件的全部數據。

配合查詢時候一系列連貫操做實現

 

讀取字段值(相似於限制讀取字段)

  1. // 獲取ID爲3的用戶的暱稱
  2. $nickname = $User->where('id=3')->getField('nickname');

 

(5)數據更新

 

 

 

個人媽,竟然被一個狗屁問題困擾一半天,在寫路徑的時候因爲事先沒有隱藏入口文件,在打url的時候就一直忽略了打Index.php,我在沒有更愛前綴的狀況下一直在改

http://localhost:8080/project2/demo1_thinkphp_3.2.1/index.php/Home/User

 


14.視圖

這個視圖好像就至關於mvc裏面的v,參看 開發手冊上面的視圖

好比在Home目錄下的控制器User中

<?php
// 本類由系統自動生成,僅供測試用途
namespace Home\Controller;
use Think\Controller;

class UserController extends Controller {
    public function index(){
        
        $this->assign('name','labixiaoxin');
       $this->display();
    }    

}

display就是渲染出相應的view中的內容,因此須要在View->新建User文件夾-》新建對應的Index.html文件。。這裏就對應上面controller裏面的渲染輸出的內容。

 

路徑相關後綴均可以調整的哈


15.模板

就是視圖裏裏面輔助輸出的數據

變量輸出

 


16.控制器

 

url訪問

http://localhost:8080/project2/demo1_thinkphp_3.2.1/Home/User

項目名稱/模塊(Home)/User(控制器名稱)--》這個直接就是默認訪問該名字的控制器(一級)

若是是二級控制器,則爲

http://localhost:8080/project2/demo1_thinkphp_3.2.1/Home/Member/User

項目名稱/模塊(Home)/Member(控制器二級文件夾名稱)/User(控制器名稱)--》這個直接就是默認訪問該名字的控制器(一級)

 

分層控制器:是與Controller控制器同級別的其餘控制器

訪問時
  1. Home\Event\UserEvent

分級控制器:是在Controller控制器下面的控制器子文件

 

彷佛多級控制器就是沒有效果

(1)控制器的名稱採用駝峯命名法

ome/Controller/IndexController.class.php

這種首字母大寫 而且在名稱後面加上Controller的命名方法,能夠在url引用的時候直接引用controller前面的名字便可

http://serverName/index.php/Home/Index/

Index其實就是指明瞭IndexController這個控制器

 

(2)設置操做方法後綴

'ACTION_SUFFIX' => 'Action', // 操做方法後綴

 

(3)多級控制器

  'CONTROLLER_LEVEL' => 2,

 

(4)實例化控制器

提供跨模塊訪問方法

  1. // 實例化Home模塊的User控制器
  2. $User = new \Home\Controller\UserController();

或採用快捷調用方法A

  1. $User = A('User');
  2. $Blog = A('Admin/Blog');

 

(5) 前置和後置操做

是在執行某個操做方法以前和以後會自動調用的方法

 
  1. public function _before_index()
  2. public function _after_index()

 

(6)輸入變量

I('變量類型.變量名/修飾符',['默認值'],['過濾方法'],['額外數據源'])
// 採用htmlspecialchars方法對$_GET['name'] 進行過濾,若是不存在則返回空字符串
    echo I('get.name','','htmlspecialchars');

 

param變量類型是框架特有的支持自動判斷當前請求類型的變量獲取方式,例如:

echo I('param.id');

I方法的第三個參數若是傳入函數名,則表示調用該函數對變量進行過濾並返回 (在變量是數組的狀況下自動使用array_map進行過濾處理),不然會調用PHP內置的filter_var方法進行過濾處理,..

filter_var() 函數經過指定的過濾器過濾變量。

語法

filter_var(variable, filter, options)

 

path類型變量能夠用於獲取URL參數

變量過濾

  • 變量修飾符:強制轉換爲某數據類型

用法以下: I('變量類型.變量名/修飾符');

 

(7)請求類型: 須要判斷當前操做的請求類型是GET 、POST 、PUT或 DELETE

(8)空操做: 指系統在找不到請求的操做方法的時候,會定位到空操做(_empty)方法來執行,利用這個機制

 

在url傳遞參數的時候,能夠不輸入須要的操做方法,直接就定位到_empty()方法內

(9)空控制器

指當系統找不到請求的控制器名稱的時候,系統會嘗試定位空控制器(EmptyController),利用這個機制咱們能夠用來定製錯誤頁面和進行URL的優化。

url:http://serverName/index.php/Home/shanghai/

根據當前控制器名字大概就是把ShangHai這個本來應該是控制器名稱的地方由參數這個東西僞裝取代。

<?php
    namespace Home\Controller;
    use Think\Controller;
    class EmptyController extends Controller{
        public function index(){
            //根據當前控制器名來判斷要執行那個城市的操做
            $cityName = CONTROLLER_NAME;
            $this->city($cityName);
        }
        //注意 city方法 自己是 protected 方法
        protected function city($name){
            //和$name這個城市相關的處理
             echo '當前城市' . $name;
        }
    }

 

 

(10)插件控制器

經過在url中加入插件控制器變量的方法,會自動定位到插件控制器中的操做方法。

  • 設置(默認):
VAR_ADDON'    =>    'plugin'
  • 設置url

插件控制器的變量由參數 VAR_ADDON 進行設置,默認爲addon,例如咱們在URL中傳入: http://serverName/Home/info/index/addon/SystemInfo

則實際定位到的是

Home/Addon/SystemInfo/Controller/InfoController.class.php

相關文章
相關標籤/搜索