jupitern / slim3-skeleton
Slim启动器/ Slim骨架包,以提升您使用Slim框架进行开发的速度
3.1.0
2021-02-16 11:48 UTC
Requires
- php: >= 7.0
- illuminate/database: 8.27.*
- jupitern/slim3-core: 1.2.*
- league/flysystem: 2.0.*
- league/plates: 3.4.*
- phpmailer/phpmailer: 6.2.*
Suggests
- jupitern/table: 1.*
- respect/validation: 1.1.*
- slim/twig-view: 2.4.*
This package is auto-updated.
Last update: 2024-09-11 16:42:37 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中进行必要的更改
运行它
$ cd [my-app-name]\public
$ php -S localhost:8080
或$ composer serve
- 浏览到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
如何创建新命令
- 在目录app\Console下创建一个类,使用命名空间App\Console
- 您的类应扩展\App\Console\Command
- 创建一个具有一些参数的公开方法。
- 完成!
示例
命令类
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 许可证发布。