jupitern/slim3-skeleton
Composer 安装命令:
composer require jupitern/slim3-skeleton
包简介
Slim starter / Slim skeleton package to boost your development with Slim framework
README 文档
README
Use this skeleton application to quickly setup and start working on a new Slim Framework 3 application (Tested with slim 3.12). This application handles http and command line requests. This application ships with a few service providers and a session middleware out of the box. Support for container resolution and auto-wiring.
To remove a service provider comment it on config/app.php file and remove it from composer.json, update composer.
Available service providers:
Available middleware:
- Session
Install the Application
Run this command from the directory in which you want to install your new Slim Framework application.
php composer.phar create-project jupitern/slim3-skeleton [my-app-name]
Replace [my-app-name] with the desired directory name for your new application. You'll want to:
- Point your virtual host document root to your new application's
public/directory. - Ensure
storage/is web writable. - make the necessary changes in config file config/app.php
Run it:
$ cd [my-app-name]\public$ php -S localhost:8080OR$ composer serve- Browse to http://localhost:8080
Key directories
app: Application code (models, controllers, cli commands, handlers, middleware, service providers and others)config: Configuration files like db, mail, routes...lib: Other project classes like utils, business logic and framework extensionsstorage: Log files, cache files and your raw, un-compiled assets such as LESS, SASS, or JavaScript.public: The public directory containsindex.phpfile, assets such as images, JavaScript, and CSSviews: Views template files.vendor: Composer dependencies
Routing and dependency injection
The app class has a route resolver method that:
- matches and injects params into the controller action passed as uri arguments
- looks up and injects dependencies from the container by matching controller constructor / method argument class names
- automatic Resolution using controller constructor / method argument types
- accepts string or Response object as controller action response
Example defining two routes for a website and backend folders:
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 http://localhost: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}"; } }
Console usage
- Usage: php cli.php [command-name] [method-name] [parameters...]
- Help: php cli.php help
How to create a new command:
- Create a class under directory app\Console in namespace App\Console
- Your class should extend \App\Console\Command
- create a public method with some params.
- DONE!
Example:
Command class:
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"; } }
Execute the class:method from command line:
// 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
Code examples
Get application instance
$app = \Lib\Framework\App::instance(); // or simpler using a helper function $app = app();
Debug a variable, array or object using the debug helper function
debug(['a', 'b', 'c']); // or debug and exit passing true as second param debug(['a', 'b', 'c'], true);
Read a user from db using Laravel Eloquent service provider
$user = \App\Model\User::find(1); echo $user->Name;
Send a email using PHPMailer service provider service named 'mail' on config file
/* @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();
List a directory content with Flysystem service provider named 'fs_local' on config file
$filesystem = app()->resolve('fs_local'); $contents = $filesystem->listContents(STORAGE_PATH, true); var_dump($contents);
Write and read from session using Session Helper class
// 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);
Write and read from cache with Redis service provider named 'redis' on config file
/** @var \Jupitern\Slim3\Utils\Redis $cache */ $cache = app()->resolve('redis'); $cache->set("cacheKey", "some test value"); echo $cache->get("cacheKey");
Changelog
v3.0
- moved core code to another package.
- route resolution using reflection can now be switched off for performance.
- config file services changed structure.
- register services in container using a string instead of classnames.
- code refactor and improvements.
v2.6
- Replaced Whoops and Collision packages by slashtrace that provides http and cli debug
V2.5
- Allow for providers and middleware to be registered only for a given scope (dependent on app name)
- general code improvements and error handling when developing rest api
Roadmap
- more service providers / separate service providers in packages
- more code examples
Contributing
- welcome to discuss a bugs, features and ideas.
License
jupitern/slim3-skeleton is release under the MIT license.
jupitern/slim3-skeleton 适用场景与选型建议
jupitern/slim3-skeleton 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 325 次下载、GitHub Stars 达 44, 最近一次更新时间为 2016 年 12 月 12 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「api」 「cli」 「Skeleton」 「slim」 「php framework」 「starter」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 jupitern/slim3-skeleton 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 jupitern/slim3-skeleton 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 jupitern/slim3-skeleton 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
A PSR-7 compatible library for making CRUD API endpoints
Base Skeleton for Laravel Application
Generates a trait to help ease the access of custom repo methods
An awesome skeleton for modern PHP development.
Contao dummy frontend modules.
Eco CLI for Laravel .env syncing
统计信息
- 总下载量: 325
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 45
- 点击次数: 5
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2016-12-12