karma-solutions / karmafw
PHP 框架
dev-master
2022-06-27 14:22 UTC
Requires
- php: >=5.4.0
Suggests
- filp/whoops: *
- maximebf/debugbar: ^1.16@dev
- mpdf/mpdf: *
- paypal/rest-api-sdk-php: *
- payplug/payplug-php: *
- phpgangsta/googleauthenticator: *
- phpmailer/phpmailer: *
- predis/predis: 2.0.x-dev
- stripe/stripe-php: *
- symfony/var-dumper: *
This package is auto-updated.
Last update: 2024-09-27 18:50:00 UTC
README
_ __ _______ __
| |/ /__ _ _ __ _ __ ___ __ _| ___\ \ / /
| ' // _` | '__| '_ ` _ \ / _` | |_ \ \ /\ / /
| . \ (_| | | | | | | | | (_| | _| \ V V /
|_|\_\__,_|_| |_| |_| |_|\__,_|_| \_/\_/
介绍
KarmaFW 是一个 PHP 小型框架,用于处理路由、模板和 SQL 数据库连接。
功能
- Web 路由
- PHP/HTML 模板
- SQL 连接
- Web 文件上传
- 发送电子邮件 (SMTP)
- 支付:Paypal, Payplug, Stripe
- 身份验证:GoogleAuthenticator, SmsAuthenticator
- PDF:创建 PDF (HTML to PDF)
- 短信:发送短信 (Free & SmsEnvoi.com)
- PHP 插件
- Bitly:生成 bit.ly URL
先决条件
需要 Composer 来管理 PHP 类的自动加载。
控制台应用结构 在此
bin
app_console.php
config
config.php
src
scripts
my_test_script.php
Models
helpers
vendor
karmasolutions/karmafw
Web 应用结构 在此
config
config.php
routes.php
public
.htaccess
index.php
images
css
js
vendor
src
Controllers
MyAppController
HomeController
Models
User
helpers
helpers_myapp.php
templates
homepage.tpl.php
vendor
karmasolutions/karmafw
配置
应用程序的配置参数在 ./config/config.php 文件中声明。
应用程序的名称应在 APP_NAME 变量中定义。
define('APP_NAME', "Mon app PHP");
路由
路由在 ./config/routes.php 文件中声明。
每个路由都分配给一个控制器的方法,需要指定。
模板
模板文件的访问路径在配置变量 TPL_DIR 中设置。
define('TPL_DIR', APP_DIR . '/templates');
SQL 数据库
MySQL 连接信息在配置变量 DB_DSN 中设置。
define('DB_DSN', 'mysql://user:password@localhost/db_name');
使用
创建新项目
$ mkdir /var/www/my_app
$ cd /var/www/my_app
- Composer
$ composer init
在 composer.json 中添加以下内容:
{
"repositories": [
{
"type": "path",
"url": "/put/here/the/path/to/karmafw"
}
],
"require": {
"karmasolutions/karmafw": "dev-master",
"filp/whoops": "^2.2@dev"
}
}
- 文档索引
mkdir -p public
nano public/index.php
<?php
// CONFIG
define('APP_DIR', realpath(__DIR__ . '/..'));
define('VENDOR_DIR', realpath(__DIR__ . '/../vendor'));
// AUTOLOAD
$loader = require VENDOR_DIR . '/autoload.php';
$loader->setPsr4('MyApp\\', __DIR__ . '/../src');
// APP BOOT
\KarmaFW\WebApp::boot();
// YOUR INIT CODE HERE
\KarmaFW\WebApp::getDb()->execute("set names utf8");
// APP ROUTE
\KarmaFW\WebApp::route();
- 应用配置
创建 config/config.php 文件并填写以下内容:
mkdir -p config
nano config/config.php
<?php
ini_set('display_errors', 1);
define('APP_NAME', "MyAPP");
define('ENV', "dev");
define('TPL_DIR', APP_DIR . '/templates');
define('DB_DSN', 'mysql://root@localhost/myapp');
创建 config/routes.php 文件并填写以下内容:
nano config/routes.php
<?php
namespace MyApp\config;
use \KarmaFW\Routing\Router;
// Homepage
Router::get('/', ['MyApp\\Controllers\\HomeController', 'homepage'])->setName('home');
5) 首页控制器:src/Controllers/MyAppController.php
mkdir -p src/Controllers
nano src/Controllers/MyAppController.php
<?php
namespace MyApp\Controllers;
use \KarmaFW\App;
use \KarmaFW\Routing\Controllers\WebAppController;
use \MyApp\Models\User;
class MyAppController extends WebAppController
{
protected $db;
protected $user;
public function __construct($request_uri=null, $request_method=null, $route=null)
{
parent::__construct($request_uri, $request_method, $route);
$this->db = App::getDb();
if (! empty($this->user_id)) {
$this->user = User::load($this->user_id);
$this->template->assign('user', $this->user);
}
}
}
5) 首页控制器:src/Controllers/HomeController.php
nano src/Controllers/HomeController.php
<?php
namespace MyApp\Controllers;
use \KarmaFW\App;
class HomeController extends MyAppController
{
public function homepage()
{
$this->template->assign('title', 'My APP');
$db = App::getDb();
$databases = $db->executeSelect('show databases');
$this->template->assign('databases', $databases);
$this->template->display('homepage.tpl.php');
}
}
5) 首页模板:templates/homepage.tpl.php
mkdir -p templates
nano templates/homepage.tpl.php
<html>
<head>
<title>{$title}</title>
</head>
<body>
<h1>hello world</h1>
<pre>
<?php print_r($databases); ?>
</pre>
</body>
</html>
5a) 布局:templates/layout.tpl.php
nano templates/layout.tpl.php
<html>
<head>
<title>{$title}</title>
</head>
<body>
<h1>hello world</h1>
{$child_content}
</body>
</html>
5b) 带布局的首页模板:templates/homepage2.tpl.php
nano templates/homepage2.tpl.php
{layout layout.tpl.php}
<pre>
<?php print_r($databases); ?>
</pre>
良好实践
配置
配置文件(config.php & routes.php)、404 错误和异常页面(500)
SEO
URL 重写、标题、meta 描述、h1、规范链接、robots.txt、sitemap.xml
性能
opcache、memcache/redis 缓存、模板最小化/合并 CSS & JS、gzip、ETag + not_modified_304 + expire CDN
统计
流量日志、Google Analytics、Google 网站管理员工具