Cakephp 3指北

這里只講cakephp3+,因為我只用過3

0.與其他框架的比較

我見過寫的最好的一篇比較文章: Zend vs Symfony vs Laravel vs Cakephp

結論:

Use the right tool for the right job. (I’m sure that’s what you wanted to hear).If you need an extremely modular and well supported framework go with Symfony 2, if you want fast prototyping and ease of use go with Laravel 5, and if you want something in-between go with CakePHP 3.

這篇文章寫得很中肯,不是單純的比較,講了各自的優缺點,里面還有些很有意思的總結。

1.安裝

最正確的方式是使用 Composer 進行安裝。
官網可能有時候進不去,并且國外鏡像有些包可能下不動,你可以使用Composer中國鏡像(國內鏡像好像是Laravel中文社區那幫人弄的)。
本文已默認你能正確安裝和使用Composer.

安裝要求

  • php5.6或更高版本 (支持php7)
  • mbstring拓展
  • intl拓展
 php -v    #在安裝之前可以檢查下php版本是否符合要求
 php -m   #查看所需拓展是否已經安裝
 composer self-update && composer create-project --prefer-dist cakephp/app my_app_name   #新建cakephp 項目,my_app_name為你的項目名

至此,你已建立了一個cakephp 最新版本的項目

2.啟動

以centos 6.5 nginx為例:

server {
    listen   80;
    server_name m.example.com admin.example.com api.example.com;

    # root directive should be global
    root   /var/www/example.com/public/webroot;
    index  index.php;

    access_log /var/www/example.com/log/access.log;
    error_log /var/www/example.com/log/error.log;

    location / {
        try_files $uri $uri/ /index.php?$args;  #兼容pathinfo
    }

    location ~ \.php$ {
        include         fastcgi_params;
        fastcgi_pass    127.0.0.1:9000;
        fastcgi_index   index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}

note:

  • 那一行兼容pathinfo 路由的配置
  • server_name 配置了多個域名在之后的子域名路由配置會用到。
  • root配置到webroot這一級 (apache可以不用)

配完別忘了重載nginx配置

service nginx reload #重載nginx配置

這個時候如果是本地,更改host 添加一條映射m.example.com 將就可以訪問

3.配置

Cakephp的配置跟其他框架比沒有太多區別,使用的是數組配置,相對yaml比較簡單。
Symfony使用yaml,如果不熟悉,很容易出錯。

這里主要講下我的個人配置習慣。

app.php

這個配置文件配置了數據庫,debug模式,郵件,加密salt.這些配置往往可能是線上、開發者服務器、測試服務器都不同的。因此這個文件也被默認從版本中忽略(git被默認忽略)。所以你可以把一些不要被提交的個人配置寫入這個文件。

例如:我在開發時會使用我本地vagrant 虛擬機的redis,我便會把redis配置寫在app.php中

   'Redis'=>[
        'default'=>[
            'host'=>'192.168.1.11',
            'port'=>'6379'
        ],
    ]

數據配置

我這里的數據配置是指一些重要的密鑰之類的配置,比如微信商戶id,短信接口賬戶等等。我會配置一個dataconf.php 在bootstarp.php引入。

//bootstrap.php
Configure::load('dataconf');
//dataconf.php
return [
    'key' => [
        'hanvon' => 'b7be897a-a101-4163-88c9-d914cd9ecb59'
    ],
    'encrypt'=>[
        'key'=>'e878caddbb44ee591f30389477f21e30a3cd4377', //實際要求要32位
        'salt'=>'d2339263f44886091b8a62ef43196f15',
    ],
    'pvlog'=>[
      'store_nums'=>100, //pvlog的redis 緩沖區數目 
    ],
    'baidu'=>[
        'mapkey'=>'474572ab0a64485f5b02d3e8accaf09c'
    ],
   
];

4.路由

Cakephp的路由功能十分的強大和靈活,并且支持REST路由,在這里講講官方文檔沒講到的子域名模式。

一般的項目開發當中,大家習慣建立一個前臺目錄和后臺目錄,多的可能或有一個移動端目錄。大多數框架都是以子目錄形式區分,也有的項目以子域名模式區分,但cakephp 通過路由配置配合prefix其實可以做到二者兼得。

 $subdomain = substr(env('HTTP_HOST'), 0, strpos(env('HTTP_HOST'), '.'));
    if (in_array($subdomain, ['admin', 'm','m-my','admin-my'])) {
        if(in_array($subdomain,['m-my','m','api'])){
            $subdomain = 'mobile';
        }
        if(in_array($subdomain,['admin','admin-my'])){
            $subdomain = 'admin';
        }
        $routes->connect('/:controller/:action/*', ['prefix' => $subdomain]);
    }
    if ($subdomain == 'admin') {
     //admin 域名 路由配置
    }

5.腳手架

Cakephp的腳手架即bake命令,就實用而言,只能用在后臺投入生產,因為后臺的代碼每個模塊的相似度最高。可通過model 生成對應的可用代碼。這一塊沒有太多的技巧,就是按照官方的demo,結合它的語法進行改造。這一塊再配合plugin功能可組織一個高可復用的一套后臺模板插件,類似python django 的admin。

6.緩存

Cakephp 的緩存的最大優勢是簡單的配置,可以輕松的利用redis,memcache,文件進行緩存一些內容。

7.shell

對于shell命令的使用我有2個場景:

1.交互式命令處理一些任務,比如最開始安裝一個插件時,可用交互命令的形式提示開發者初始化一些數據。

2.shell+crontab 定時執行任務。如果業務允許還可以結合reids 隊列做一些隊列任務。

8.發布

這里講一些發布所注意的事項。

  • app.php中的debug 配置 false,關閉debug模式。
  • 保證各個目錄的權限,其中logs 和 tmp 兩個目錄php-fpm 需對其有讀寫權限。
composer dumpautoload -o   #能加快類的讀取速度
bin/cake plugin assets copy #官方建議 并且如果用到ueditor之類的,能解決它的上傳問題
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,106評論 6 542
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,441評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,211評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,736評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,475評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,834評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,829評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,009評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,559評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,306評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,516評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,038評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,728評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,132評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,443評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,249評論 3 399
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,484評論 2 379

推薦閱讀更多精彩內容

  • Composer Repositories Composer源 Firegento - Magento模塊Comp...
    零一間閱讀 3,967評論 1 66
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,826評論 18 139
  • 過去做事情急,什么東西拿起來就用,不喜歡進行系統性的學習,造成在使用過程中的錯誤和低效,現在感覺自己耐心多了,用之...
    馬文Marvin閱讀 2,012評論 0 10
  • 原文鏈接 必備品 文檔:Documentation API:API Reference 視頻:Laracasts ...
    layjoy閱讀 8,619評論 0 121
  • 1.我怎么如此幸運,晨起在單位剛進醫辦室,領導宣布由于單位有工作需要要稍做調整,同事們便開始從自己的角度出發拒理力...
    史真如閱讀 105評論 0 0