這里只講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之類的,能解決它的上傳問題