karmaphp / karma
一个小巧的PHP应用程序框架
Requires
- ext-json: *
- doctrine/annotations: ^1.13
- php-di/php-di: ^6.3
- slim/psr7: ^1.4
- slim/slim: ^4.8
Requires (Dev)
- phpunit/phpunit: 8.5.*
Suggests
- smarty/smarty: Smarty - the compiling PHP template engine
- twig/twig: Twig, the flexible, fast, and secure template language for PHP
README
已弃用
请注意,此项目在Slim Framework最终版本发布之前包含了一些当前已包含的功能和简化软件开发的一些实用方法。由于Slim Framework的一些发展,例如放弃了自容器并使用PHP-DI等容器,通过接口使用等发展和实践,这些已经包含在最新版本中,因此这个项目不再需要。您可以通过将 slim-bridge 包含到项目中继续使用以Slim Framework开始的工程。
Karma框架
Mikro框架,基于Slim Framework构建的PHP应用程序框架。与Slim Framework完全兼容。除了以下说明外,您还可以使用其文档。
使命
为使用PHP进行应用程序开发提供一种替代解决方案。为那些希望从PHP的复杂环境中解脱出来,转向框架的用户提供一种替代方案。
愿景
提出的标准和建议被大家接受并使用,从而提供满足普遍需求的结构。
使用Composer安装
{
"require": {
"karmaphp/karma": "^2.2"
}
}
启动(index.php)
<?php require_once 'vendor/autoload.php'; $app = \Karma\AppFactory::create(); $app->run();
启用容器
Karma框架包含 php-di/php-di 包,并默认使用 php-di 作为容器。
在构建容器时,第一个参数为容器类,第二个参数为服务,以 array 的形式提供。第三个参数 $useAnnotations 默认为 true,因此默认支持注解注入,并建议使用。
您可以通过 $container->get('smarty') 或 $container->smarty 的方式访问容器中的服务。
<?php require_once 'vendor/autoload.php'; $container = \Karma\ContainerBuilder::build( \Karma\Container::class, [ 'smarty' => \DI\get(\Karma\Service\SmartyService::class) ] ); $app = \Karma\AppFactory::create($container); $app->run();
路由
建议使用 [\App\Controller\MainController::class, 'Index'] 这样的路由策略。
<?php require_once 'vendor/autoload.php'; $container = \Karma\ContainerBuilder::build( \Karma\Container::class, [ 'smarty' => \DI\get(\Karma\Service\SmartyService::class) ] ); $app = \Karma\AppFactory::create($container); $app->get('/', [\App\Controller\MainController::class, 'Index']); $app->run();
控制器
在Karma框架中,您可以以控制器的方式使用您将编写的类。建议控制器类位于 app/Controller 目录。
<?php namespace App\Controller; use \Karma\Controller; class MainController extends Controller { public function Index() { return 'Merhaba Dünya'; } }
控制器函数可以返回 string 或 ResponseInterface。
对于 JSON 响应,可以使用 $this->json() 函数;对于 XML 响应,则可以使用 $this->xml() 函数。
视图
建议使用如 Smarty 或 Twig 这样的独立模板引擎。
示例 SmartyService.php smarty/smarty
<?php namespace App\Service; use Smarty; class SmartyService { /** * @var Smarty */ protected $smarty; public function __construct() { $this->smarty = new Smarty(); } public function fetch($template, array $params = []) { return $this->smarty ->assign($params) ->fetch($template); } }
示例 TwigService.php twig/twig
<?php namespace App\Service; use Twig\Environment; use Twig\Loader\FilesystemLoader; class TwigService { /** * @var Environment */ private $twig; public function __construct() { $loader = new FilesystemLoader(ROOT_DIR . '/views/twig'); $this->twig = new Environment($loader, [ 'cache' => ROOT_DIR . '/views/twig_c', ]); } public function render($name, array $context = []) { return $this->twig->render($name, $context); } }
从Slim Framework迁移到Karmaphp
本部分将提供有关如果您当前在项目中使用Slim Framework,如何迁移到karmaphp的信息。
- 在控制器函数中,您不需要使用 $request 和 $response。相反,您可以在控制器中使用 $this->request。
- 您可以通过创建自己的异常类并扩展
\Karma\ErrorHandler类来创建可调用的类来发展错误处理逻辑。 - 在ErrorHandling、Middleware和Controller中,您不需要使用 $request 和 $response。您可以通过容器或直接通过Controller使用 $container->request 或 $this->request 来访问Request和Response对象。
- 在路由定义中,通过将第二个参数作为数组提供,您可以指定第一个参数为您自己的Controller类,第二个参数为要调用的函数名称。例如:
[MyController.class, 'Edit'] - 在Controller中,您可以使用
$this->param('customer_id')函数获取请求参数。 - 在Controller中,您可以使用
$this->isPost()函数检查传入的请求是否为POST。
数据库
推荐使用 illuminate/database 包作为 ORM 进行数据库操作。对于表格类,建议使用 app/Table 目录;对于仓库类,建议使用 app/Repo 目录。
服务
对于所需的服务,建议使用 app/Service 目录。
演示
您可以在 https://github.com/karmaphp/demo 地址查看项目。
贡献者
感谢那些对自由软件世界贡献的人们。
贡献方式
请使用它,并向不使用它的人推荐 :) 如果您有建议,可以创建 issue。