承接 jupitern/slim3-skeleton 相关项目开发

从需求分析到上线部署,全程专人跟进,保证项目质量与交付效率

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

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:

  1. $ cd [my-app-name]\public
  2. $ php -S localhost:8080 OR $ composer serve
  3. 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 extensions
  • storage: Log files, cache files and your raw, un-compiled assets such as LESS, SASS, or JavaScript.
  • public: The public directory contains index.php file, assets such as images, JavaScript, and CSS
  • views: 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:

  1. Create a class under directory app\Console in namespace App\Console
  2. Your class should extend \App\Console\Command
  3. create a public method with some params.
  4. 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 我们能提供哪些服务?
定制开发 / 二次开发

基于 jupitern/slim3-skeleton 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 325
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 45
  • 点击次数: 5
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 44
  • Watchers: 6
  • Forks: 12
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2016-12-12