nagyatka/kodiapp

PHP应用程序框架

v0.11.25 2017-07-31 12:51 UTC

README

PHP应用程序框架

安装

$ composer require nagyatka/kodiapp

文档 v1.0

匈牙利语文档

启动应用

/*
 * index.php
 */

define('PATH_BASE', dirname(__FILE__).'/..' );

// Composer autoloader
require '../vendor/autoload.php';

use KodiApp\Application;
use MyApp\MyAppConfiguration;

Application::getInstance()->run(new MyAppConfiguration());

可以通过调用Application::getInstance()类的方法来访问一个应用。由于应用使用了Singleton模式,因此在应用运行期间,可以通过这个方法在任何地方调用。

可以使用run方法启动应用,该方法需要一个实现ApplicationConfiguration接口的类作为参数。在这里,只需要实现initializeApplication方法,该方法将在应用运行开始时被调用。在这里需要注册数据库连接、路由、安全设置等。

这种方法提供了高度的自由度,因为我们可以将配置实现在配置类内部加载配置文件,也可以通过构造函数来解决这个问题。

class MyAppConfiguration implements ApplicationConfiguration
{
    public function __construct()
    {
        // ...
    }

    public function initializeApplication(Application $application)
    {
        // ...
    }
}

组件

组件注册

需要在实现ApplicationConfiguration接口的类的initializeApplication方法中初始化不同的组件。

路由

需要按照以下结构定义一个数组来定义路由

//Struktúra:    
    [route_name] => [
        "method"    =>  [HTTP method],
        "url"       =>  [url],
        "handler"   =>  "[controller_class]::[controller_class_function]",
    ], ...
    
//Példa:
    "home" => [
        "method"    =>  "GET",
        "url"       =>  "/",
        "handler"   =>  "HomeController::handleIndex",
    ],

路由初始化

class MyAppConfiguration implements ApplicationConfiguration
{
    private $myroutes = [
         "home" => [
                "method"    =>  "GET",
                "url"       =>  "/",
                "handler"   =>  "HomeController::handleIndex",
         ],  
    ];
    
    public function initializeApplication(Application $application)
    {
        $router = new SimpleRouter();
        $router->setRoutes($this->myroutes);
        $application->setRouter($router);
    }
}

与路由关联的HomeController

class HomeController 
{
    public function handleIndex()
    {
        return "Hello world!";
    }
}

在url中设置参数

class MyAppConfiguration implements ApplicationConfiguration
{
    private $myroutes = [
         "home" => [
                "method"    =>  "GET",
                "url"       =>  "/user/{user_id:[0-9]+}",
                "handler"   =>  "UserController::getUser",
         ],  
    ];
    
    public function initializeApplication(Application $application)
    {
        $router = new SimpleRouter();
        $router->setRoutes($this->myroutes);
        $application->setRouter($router);
    }
}

class UserController 
{
    public function getUser($params)
    {
        return "User_id: ".$params["user_id"];
    }
}

可以在给定的url中设置任意参数,这些参数将以关联数组的形式传递给方法。在url参数中,可以使用冒号(:)来分隔,并可以指定一个必须匹配的正则表达式,以便调用在handler中指定的方法!有关url设置的详细信息,请参阅这里