PHP code example of huanyuwong / handscube

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/ */

    

huanyuwong / handscube example snippets


Route::get('/', 'index@welcome');

Route::get('/', 'index@welcome')->name('welcome')

Route::get("/admin/{user}/{option}", "admin.index@user")->name("admin");

Route::get('/admin/:user/:option','admin.index@user);

	//IndexController.php
    public function user($user, $option){
		echo $user . '-' . $option;
	}

$url = Route::route('admin','[pars1, pars2]')

//匹配形如 /admin/connect | /admin/test/1/testname
Route::prefix('/admin', function () {
    Route::get('/test/:id/:name', 'admin.index@test');
    Route::get('/connect', 'admin.index@connect');
});

Route::resource('article', 'article');

//注册一个post请求的路由
Route::post('/post','index@put');
//注册一个请求方法为any类型的路由
Route::any('/connect', 'index@connect');
//自定注册请求方法类型的路由
Route::match(["get", "post"], "/testmatch", "index@match");

Route::get('/user/{id}','user@show')


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);
    }

Route::resource('resetful','articles');

php cube create:controller ArticlesController --resource

php cube create:controller NormalController

$this->redirect('https://baidu.com');

$this->back();


namespace App\Controllers;

use Handscube\Kernel\Request;

class UserController extends Controller {
    
    public function store(Request $request){
        //...
    }
}

Route::get('user/{id}','user@show');

//UserController.php

public function show(Request $request, $id){
    //...
}


namespace App\Controllers;
use Hansubce\Kernel\Request;

class PostController exnteds Controller {
    //...
    public function store(Request $request){
        //$request->post 映射了$_POST超全局变量
        $id = $request->post['id'];
    }
}

$request->query //映射了$_GET查询参数
$request->request //映射了$_REQUEST超全局变量
$request->input //映射并解析了php标准输入参数[解析为数组]
$request->fiels //映射$_FILES.
$request->_server //对应$_SERVER超全局变量

Route::put('post/{id}','post@update')


namespace App\Controllers;

class PostController extends Controller {
    
    //...
    public function update(Request $request,$id){
        //也可以直接输出参数上的$id值,效果是相同的。
        return $request->input('id');
    }
}

return $request->input();

//传入id和name,获取形如 [1,'value'] 的数据
$result = $request->input(['id','name'])

$request->only('id'); //只获取id参数
$request->only('id','uid','name'); //获取id、uid、name参数

$request->except('id'); //获取除了id之外的其它所有数据
$request->except('id','uid'); //获取除了id和uid之外的其它所有数据

 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 = [
	//在这里注册检查站
    ];
}

 protected $register = [
	OneStation::class,
	TwoStation::class
    ];


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\Guards;

use Handscube\Kernel\Guards\ControllerGuard;
use Handscube\Kernel\Request;

class IndexGuard extends ControllerGuard
{
    /**
    * 注册一个或多个对该控制器所有方法有效的检查站[除了except指定的方法]
    */
    protected $register = [
    "index" => SomeoneStation::class,
    ];
    
    /**
    * $register注册的检查站对该数组注册的方法无效
    */
    protected $except = [
	'login'
    ];

    /**
    * $register属性注册的方法只对以下方法有效
    */
    protected $only = [
	'user'
    ];

    /**
    * 给一个控制器方法具体指定一个检查站
    */
    protected $specified = [
	"login" => ChangeIdStation::class,
    ];

    /**
    * 与IndexController中的index方法对应,
    * 数据在进入控制器的index方法前须先通过此方法检验。
    */
    public function indexGuard(Request $request)
    {
        if($request->id){
            //...做一些检查id的操作。
        }
    }

    //对应IndexController中login方法
    public function loginGuard()
    {
		//...
    }
}


//IndexGuard.php
public function model(){
    parent::model();
    Route::bind('user',function($vakue){
        return User::find(1); //绑定请求参数user到id为1的User模型
    });
    Route::bind('anotherParam',function($value){
            //...
    })
}

//IndexController.php

public function storeUser(User $user){
    return $user->id; //无论请求参数如何改变,值都为1
}

return [
    "components" => [
        "register" => [
            "router" => Handscube\Kernel\Route::class,
            "dev" => Handscube\Dev\DevComponent::class,
        ],
        "defer" => [
            \Handscube\Assistants\Arr::class,
        ],
    ],
]


    //IndexController.php
    
    public function user(){
    	//通过request组件获取值
    	return $this->app->request->input('user_id');
	}

 "defer" => [ App\Components\DeferComponent::class],

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 = [

    ];
}


/** 或者使用Event::on()方法 **/
Event::listen(
            '\Handscube\Kernel\Events\PostComplete',
            'App\Listeners\StoreEventSubscriber@onPostStore'
           	);


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);
	}
}

return [
    //mysql配置
    "mysql" => [
        'driver' => 'mysql',
        'host' => 'localhost',
        'port' => '3306',
        'database' => 'testdb',
        'username' => 'root',
        'password' => 'rootpsd',
        'unix_socket' => '',
        'charset' => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix' => '',
        'strict' => true,
        'engine' => null,
    ],
	//redis配置
    "redis" => [
        "parameters" => [
            'scheme' => 'tcp',
            'host' => '127.0.0.1',
            'port' => 6379,
            'database' => 0,
        ],
        "options" => [

        ],
    ],
];

namespace App\Models;

use App\Kernel\Model;

class Post extends Model
{
	protected $table;
}


public function show($id){
    return Post::find($id);
}

 return DB::table('posts')
            ->select('id', 'content')
            ->where('id', '<>', 1)
            ->get();

$value = Redis::get('key');

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);

$response = new Response(
    'Content',
    Response::HTTP_OK,
    [
        'content-type' => 'text/html'
    ]
);
return $response;

$response->headers->set('Content-Type', 'text/plain');

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',
            ]);
    }
+HTML
<!--- Welcome.php --->
<div>
    <!--- 使用大括号访问变量 --->
    <p>{$id}</p> 
    <p>{$name}</p>
</div>

public function signToken(){
 		$signature = new Signature();
        $token = $signature
            ->setIss('http://handscube.com')
            ->setAud('testAud')
            ->setId('sign-id-01', true)
            ->set('uid', 'user-0000000001')
            ->expire(time() + 3600)
            ->created(time())
            ->sign($signature::$encrypter['sha256'], 'handscube-secret-key');
    	$data = $token->getClaims(); //获取数据
    	//验证token是否有效。
    	var_dump($token->verify($signature::$encrypter['sha256'], 'wrong-key'));
}

php cube serve

php cube serve --p 8001 --c '/usr/local/etc/php.ini'

php cube start:worker