1. Go to this page and download the library: Download huanyuwong/handscube library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
namespace App\Controllers;
use App\User;
use Handscube\Kernel\Controller;
class UserController extends Controller
{
/**
* 展示用户信息
*
* @param int $id
* @return Response
*/
public function show($id)
{
return User::find($id);
}
}
namespace App\Controllers;
use Handscube\Kernel\Request;
class IndexController {
public function show(Reqeust $request, $id){
if($request->input){
//逻辑代码
}
}
}
Route::get('/test/:user/:post','index@test')
public function test(Request $request, $user, $post){
// $user和$post是相应的id值
}
namespace App\Controllers;
use App\Models\Post;
use App\Models\User;
use Handscube\Kernel\Controller;
use Handscube\Kernel\Request;
class IndexController extends Controller
{
public function test( Request $request, User $user, Post $post)
{
//此时$user和$post已经被绑定为相应的数据模型了。
return $this->response($user->id . '-' . $post->id);
}
class IndexController extends Controller
{
public static function model(){
//显式绑定user为id为1的数据模型
Route::bind('user',function($value){
return User::find(1);
});
}
public function test( Request $request, User $user, Post $post)
{
//显式绑定user后,无论传入id的值如何改变,这里的user模型将一直是id为1的user模型
return $this->response($user->id . '-' . $post->id);
}
public function update(Request $request,$id){
//打印请求头信息
return $request->header
}
//IndexController.php
use Handscube\Assistants\Cookie;
public function testSetCookie(){
//设置cookie
Cookie::set($name,$value,$expire);
//以下操作效果相同。
(new Cookie)
->name($name)
->value($value)
->expire($expire)
->path($path)
->domain($domain)
->secure($secure)
->httpOnly($httpOnly);
->save();
}
//读取cookie
public function testGetCookie(){
Cookie::get('name','value');
}
use Handscube\Facades\Session;
class IndexController {
Public function testSession(){
//通过门面访问session
Session::get('key');
Session::set('key','value');
//设置多个session的值
Session::mset([
'key1'=>'value1',
'key2'=>'value2'
]);
}
}
namespace App\Kernel;
use App\Kernel\AppGuard;
use Handscube\Kernel\Application;
class App extends Application
{
//绑定应用守卫
public function bindGuard()
{
return AppGuard::class;
}
}
namespace App\Kernel;
use Handscube\Kernel\Guard;
class AppGuard extends Guard
{
const cate = "app";
protected $register = [
//在这里注册检查站
];
}
namespace App\Stations;
use Handscube\Kernel\CrossGate;
use Handscube\Kernel\Response;
use Handscube\Kernel\Station;
class OneStation extends Station
{
public function handle(\Handscube\Kernel\Request $request)
{
//检查接口token是否有效。
if (CrossGate::verifyAccessToken($request->header['Access-Token'], $request->input()) === true) {
return;
} else {
//如果无效返回401 Unauthorized.
(new Response())->withJson(['status' => Response::HTTP_UNAUTHORIZED, 'message' => Response::$statusTexts[Response::HTTP_UNAUTHORIZED]])->send();
}
}
}
namespace App\Events;
use App\Models\User;
use Handscube\Kernel\Events\Event;
class UserStore extends Event
{
public $user; //用户模型
public function __construct(User $user)
{
parent::__construct($user); //须调用父类构造方法完成一些初始化工作。
$this->user = $user;
}
}
namespace App\Suppliers;
use Handscube\Kernel\Events\PostComplete;
use Handscube\Kernel\Listeners\AdminNotifination;
use Handscube\Kernel\Listeners\PostNotifination;
class ScheduleSupplier
{
/**
* 注册事件监听器
*/
public static $listeners = [
PostComplete::class => [
PostNotifination::class,
AdminNotifination::class,
],
'App\Events\UserStore' => AdminNotifination::class,
];
//注册事件订阅者
public static $subscribers = [
\App\Listeners\StoreEventSubscriber::class,
];
public static $observers = [
];
}
namespace App\Listeners;
use Handscube\Kernel\Events\Event;
class PostNotifination extends Listener
{
//每一个事件监听器有一个hanlde方法用来接受事件对象
public function handle(Event $event)
{
if($event->post->title == 'Welcome'){
//模拟完成了一个任务
echo "PostNotfination listener trigger.\n";
}
}
}
namespace App\Listeners;
use App\Events\UserStore; //事件
class StoreEventSubscriber
{
//事件订阅方法
public function onUserStore($event)
{
echo "> User $event->trigger Store Listener trigger.\n";
}
//事件订阅方法
public function onUserLogin($event)
{
echo "> User Login Listener trigger.\n"; //访问$event数据的代码
}
//事件订阅方法
public function onPostStore($event)
{
echo ">> Post Store Listener trigger.\n";
}
/** 订阅了两个事件PostComplete、UserStore和相关的监听方法 **/
public function subscribe($event)
{
$event->on(
'\Handscube\Kernel\Events\PostComplete',
'App\Listeners\StoreEventSubscriber@onPostStore' //绑定到onPostStore方法
);
$event->listen(
UserStore::class,
[
/** 绑定了多个监听方法 **/
'App\Listeners\StoreEventSubscriber@onUserLogin',
'App\Listeners\StoreEventSubscriber@onUserStore',
]
);
}
}
class ScheduleSupplier
{
//注册一个事件订阅者
public static $subscribers = [
\App\Listeners\StoreEventSubscriber::class,
];
}
//PostController.php
public function store(Post $post){
if(storePostDone($post)){
//该文章存储完成后,触发PostCompolete事件,
//$post作为数据传给入,第二个参数$this表示由谁触发。
Event::emit(new PostComplete($post)), $this);
}
}
namespace App\Models;
use App\Kernel\Model;
class User extends Model
{
protected $table = "user";
public function updatePolicy(User $user, Post $post)
{
//只有当文章属于该User模型时才能进行更新。
return $user->id === $post->user_id;
}
class UserController {
public function update(Post $post){
//假设你有一个判断当前用户的方法currentUser()
if($this->currentUser()->can('update',$post)){
//更新资源操作...
}else{
//无权更新资源,返回错误信息。
}
}
}
//IndexController.php
public function testQueue(){
//生产10个队列任务到队列。
for ($i = 0; $i < 10; $i++) {
if ($this->dispatch(new \App\Tasks\SendMail($i))) {
echo "$i - dispatch success.\n";
}
}
}
use Handscube\Kernel\Response;
class IndexController {
public function store(User $user){
if($this->storeUserDone($user)){
/**
* 这样就返回了一个200状态码的响应,
* success'是响应的内容,默认为空字符串
*/
(new Response("success",Response::HTTP_OK))->send();
}
}
}
return new Response("success",HTTP_OK))
return (new Response())
->setContent('Hello Handsubce.')
->setStatusCode(Response::HTTP_OK);
use Handsucbe\Kernel\Response;
public function returnWithJson(){
(new Response())->withJson(['status'=>'success','code'=>200])->send();
}
return $this->response()->withJson($dataArray);
response($data)->send();
//在某个控制器中
public function returnWithCookie(){
$cookie = (new Cookie())
->name("key")
->value("value");
return $this->response()->withCookie($cookie) //withCookie接受一个Cookie实例
}
$response->setCache(array(
'etag' => 'E-tagabc',
'last_modified' => gmdate('D, d M Y H:i:s',time())." GMT"
'max_age' => 3600,
'private' => false,
'public' => true,
));
(new Response())->redirect($targetUrl)
use Handsubce\Kernel\View;
class TestController extends Controller
{
public function login()
{
//展现home模块下的Login.php视图。
(new View('home.login'))->show();
}
public function showWelcomde()
{
return (new View('home.welcome'))
->with([
'id' => 1,
'name' => 'testName',
]);
}