jupitern/slim3-skeleton

Slim启动器/ Slim骨架包,以提升您使用Slim框架进行开发的速度

3.1.0 2021-02-16 11:48 UTC

README

使用此骨架应用程序快速设置并开始开发新的Slim Framework 3应用程序(已测试与slim 3.12兼容)。此应用程序处理http和命令行请求。应用程序自带一些服务提供者和会话中间件。支持容器解析和自动装配。

要移除服务提供者,在config/app.php文件中注释它,并从composer.json中移除它,然后更新composer。

可用的服务提供者

可用的中间件

  • 会话

安装应用程序

从您想要安装新Slim Framework应用程序的目录运行此命令。

php composer.phar create-project jupitern/slim3-skeleton [my-app-name]

[my-app-name]替换为您新应用程序的期望目录名称。您需要

  • 将虚拟主机的文档根目录指向您新应用程序的public/目录。
  • 确保storage/是可写的。
  • 在config文件config/app.php中进行必要的更改

运行它

  1. $ cd [my-app-name]\public
  2. $ php -S localhost:8080$ composer serve
  3. 浏览到https://:8080

关键目录

  • app:应用程序代码(模型、控制器、cli命令、处理器、中间件、服务提供者等)
  • config:配置文件,如db、mail、routes...
  • lib:其他项目类,如utils、业务逻辑和框架扩展
  • storage:日志文件、缓存文件以及您的原始未编译的资产,如LESS、SASS或JavaScript。
  • public:公共目录包含index.php文件,以及图像、JavaScript和CSS等资产
  • views:视图模板文件。
  • vendor:Composer依赖项

路由和依赖注入

App类有一个路由解析方法,该方法

  • 匹配并注入参数到控制器动作(通过URI参数传递)
  • 查找并注入容器中的依赖项,通过匹配控制器构造函数/方法参数类名
  • 使用控制器构造函数/方法参数类型自动解析
  • 接受字符串或Response对象作为控制器动作响应

示例:定义网站和后端目录的两个路由

use \Psr\Http\Message\ServerRequestInterface as Request;
use \Psr\Http\Message\ResponseInterface as Response;

// simple route example
$app->get('/welcome/{name}', function (Request $request, Response $response, $args) {
	$name = $request->getAttribute('name');
	$response->getBody()->write("Hello, $name");

	return $response;
});


// example route to resolve request to uri '/' to \App\Http\Site\Welcome::index
$app->any('/', function ($request, $response, $args) use($app) {
	return $app->resolveRoute([\App\Http\Welcome::class, "index"], $args);
});


// example calling https://:8080/index.php/test/nuno with the route bellow
// injects the :name param value into the method $name parameter
// Other parameters in the method will be searched in the container by classname or automatically resolved
// in this example the resolveRoute method will create a user instance and inject it in the controller method
$app->any('/test[/{name}]', function ($request, $response, $args) use($app) {
	return $app->resolveRoute([\App\Http\Welcome::class, "method"], $args);
});

namespace App\Http;
use Jupitern\Slim3\App\Http\Controller;

class Welcome extends Controller
{
	public function method($name, \App\Model\User $user)
	{
	    return get_class($user)."<br/>name = {$name}";
	}
}

控制台使用方法

  • 用法:php cli.php [命令名称] [方法名称] [参数...]
  • 帮助:php cli.php help

如何创建新命令

  1. 在目录app\Console下创建一个类,使用命名空间App\Console
  2. 您的类应扩展\App\Console\Command
  3. 创建一个具有一些参数的公开方法。
  4. 完成!

示例

命令类

namespace App\Console;

class Test extends Command
{

	public function method($a, $b='foobar')
	{
		return
			"\nEntered console command with params: \n".
			"a= {$a}\n".
			"b= {$b}\n";
	}
}

从命令行执行类:方法

// since param "b" is optional you can use one of the following commands

> php cli.php Test method a=foo b=bar

> php cli.php Test method a=foo

代码示例

获取应用程序实例

$app = \Lib\Framework\App::instance();
// or simpler using a helper function
$app = app();

使用调试辅助函数调试变量、数组或对象

debug(['a', 'b', 'c']);
// or debug and exit passing true as second param
debug(['a', 'b', 'c'], true);

使用Laravel Eloquent服务提供者从数据库中读取用户

$user = \App\Model\User::find(1);
echo $user->Name;

使用名为'mail'的PHPMailer服务提供者通过配置文件发送电子邮件

/* @var $mail \PHPMailer\PHPMailer\PHPMailer */
$mail = app()->resolve('mail');
$mail->addAddress('john.doe@domain.com');
$mail->Subject = "test";
$mail->Body    = "<b>test body</b>";
$mail->AltBody = "alt body";
$mail->send();

使用名为'fs_local'的Flysystem服务提供者列出目录内容

$filesystem = app()->resolve('fs_local');
$contents = $filesystem->listContents(STORAGE_PATH, true);
var_dump($contents);

使用Session Helper类写入和读取会话

// save user info in session
\Jupitern\Slim3\Utils\Session::set('user', ['id' => '1']);
// get user info from session
$uservar = \Jupitern\Slim3\Utils\Session::get('user');
var_dump($uservar);

使用Redis服务提供者写入和读取缓存

/** @var \Jupitern\Slim3\Utils\Redis $cache */
$cache = app()->resolve('redis');
$cache->set("cacheKey", "some test value");
echo $cache->get("cacheKey");

更新日志

v3.0

  • 将核心代码移动到另一个包。
  • 使用反射的路由解析现在可以关闭以提升性能。
  • 配置文件服务结构已更改。
  • 使用字符串而不是类名在容器中注册服务。
  • 代码重构和改进。

v2.6

  • 将 Whoops 和 Collision 包替换为 slashtrace,该包提供 http 和 cli 调试功能。

V2.5

  • 允许只为特定的作用域(依赖于应用名称)注册提供者和中间件。
  • 一般代码改进和开发 rest api 时的错误处理。

路线图

  • 更多服务提供者 / 包中分离的服务提供者。
  • 更多代码示例。

贡献

  • 欢迎讨论错误、功能和想法。

许可证

jupitern/slim3-skeleton 采用 MIT 许可证发布。