simple-php-mvc/simple-php-mvc-app

Simple PHP-MVC 应用程序

dev-master 2016-03-25 20:40 UTC

This package is not auto-updated.

Last update: 2024-10-02 07:47:37 UTC


README

带有模型视图控制器的模板

目录

安装

安装composer

Git克隆(推荐)

在github上克隆仓库。然后通过终端进入克隆的目录,然后执行 composer install 以在 vendor 目录中安装项目的所有依赖。

注意:这是推荐的安装方式,以获得已配置的应用程序。

Composer install

-- 创建一个以项目名称命名的文件夹。 -- 进入你创建的文件夹,并添加一个包含以下内容的 composer.json 文件

{
   "require": {
      "simple-php-mvc/simple-php-mvc-app": 'dev-master'
   }
}

-- 打开你的系统操作系统的终端,并在项目文件夹中执行 composer install,等待安装 Simple PHP MVC。

Composer create-project

另一种使用composer安装的方法是在系统操作系统的终端中执行 composer install simple-php-mvc/simple-php-mvc 命令。

配置

确保系统根目录具有正确的权限,使用 sudo chmod 755 -R

proyecto
|_ app/
    |_ config/
       routes.json
       routes.php
    .htaccess
    AppMVC.php
    autoload.php
    console
|_ src/
|_ vendor/
|_ web/
   .htaccess
   app.php
   app_dev.php

**重要:** 在 app/AppMVC.php 文件中是模块、供应商或服务的配置以及路由,可能如下所示

<?php

use MVC\MVC as BaseMVC;
use MVC\Module\Module;
use MVC\Provider\Provider;
use MVC\Server\Route;

/**
 * Description of AppMVC
 *
 * @author Ramón Serrano <ramon.calle.88@gmail.com>
 */
class AppMVC extends BaseMVC
{
    
    /**
     * Set MVC Application Modules
     * 
     * @return Module[]
     */
    public function setModules()
    {
        $modules = array(
            new MVC\Tests\EjemploModule\EjemploModule(),
        );
        
        return $modules;
    }
    
    /**
     * Set MVC Application Providers
     * 
     * @return Provider[]
     */
    public function setProviders()
    {
        $providers = array(
            new MVC\DataBase\PdoProvider(array(
                'dbname' => 'test'
            )),
            new MVC\Tests\Provider\DoctrineDBALProvider(array(
                'charset'  => null,
                'driver'   => 'pdo_mysql',
                'dbname'   => 'test',
                'host'     => 'localhost',
                'user'     => 'root',
                'password' => null,
                'port'     => null,
            )),
            new MVC\Tests\Provider\DoctrineORMProvider(array(
                'params'       => array(
                    'charset'  => null,
                    'driver'   => 'pdo_mysql',
                    'dbname'   => 'test',
                    'host'     => 'localhost',
                    'user'     => 'root',
                    'password' => null,
                    'port'     => null,
                ),
                'dev_mode'     => false,
                'etities_type' => 'annotations',
                'path_entities' => array(
                    $this->getAppDir() . '/../src/MVC/Tests/EjemploModule/Entity'
                ),
                'proxy_dir'    => null
            )),
            new MVC\Tests\Provider\MonologProvider(array(

            )),
            new MVC\Tests\Provider\TwigProvider(array(
                'path' => $this->getAppDir() . '/../src/MVC/Tests/EjemploModule/Resources/views'
            )),
        );
        
        $providers[] = new MVC\Tests\EjemploModule\EjemploProvider(array(
            
        ));
        
        return $providers;
    }
    
    /**
     * Set MVC Application Routes
     * 
     * @return Route[]
     */
    public function setRoutes()
    {
        $routes = parent::setRoutes();
        
        return $routes;
    }
    
    /**
     * {@inheritdoc}
     */
    public function getModules()
    {
        return $this->container->getModules();
    }
}

路由、视图和控制器

  1. 路由
  • app/config/routes.phpapp/config/routes.json 文件中,您可以配置您想要配置的路由的操作。
  1. 视图
  • 视图应该是扩展名为 .html.php 的文件。
  • 如果您使用控制器来显示视图,则这些文件的名称应与控制器的操作相同。例如:操作/控制器 index文件/视图 index.html
  • 这些文件必须存储在 MVC\MVC 实例的 templates_path 配置中指定的目录中,名称为控制器类的名称(不包含 Controller)。例如:目录 其中类 -> ClaseController。
  1. 控制器
  • 建议每个控制器都从 MVC\Controller\Controller 继承。
  • 每个控制器的返回值应该是 字符串 或类型为 关联数组 的变量,值可以是任何类型。
  • 要向视图发送多个变量,可以是任何类型,控制器必须在 array() 函数内返回这些变量。例如:$variable1, $variable2, $variable3 return array( 'variable1' => $variable1, 'variable2' => $variable2, 'variable3' => $variable3 )

控制器

<?php

namespace ControllersNamespace;

use MVC\Controller\Controller,
    MVC\MVC,
    MVC\Server\HttpRequest;

class ClaseController extends Controller
{
   public function indexAction(MVC $mvc, HttpRequest $request)
   {
       return '<p>Resultado de la accion</p>';
   }
}

模型

模型可以这样创建

<?php
namespace ModelsNamespace;

use MVC\DataBase\Model,
    MVC\DataBase\PDO;

class Nombre_del_Modelo extends Model
{
    public function __construct(PDO $pdo)
    {
        parent::__construct($pdo, 'nombre_tabla');
    }
}

也支持DBAL模型

<?php
namespace ModelsNamespace;

use Doctrine\DBAL\Connection,
    MVC\DataBase\DBALModel as Model;

class Nombre_del_Modelo extends Model
{
    public function __construct(Connection $conn)
    {
        parent::__construct($conn, 'nombre_tabla');
    }
}

路径

路径表示为任何包含查询方法的URI,该URI发送到服务器。

app/config 文件夹中的 routes.jsonroutes.php 文件中配置应用程序的路径。

[{
    "method": ["get", "post", "ajax"],
    "pattern": "/index",
    "action": "ControllerNamespace\\ClaseController::indexAction",
    "name": "foo_index"
},
{
    "method": ["ajax", "delete", "get", "post", "put", "head", "options"],
    "pattern": "/index2",
    "action": "ControllerNamespace\\FooController::index2Action",
    "name": "foo_index2"
}]

use MVC\Server\Route;

<?php
return array(
    array(
        "method"  => ["ajax", "get", "post"],
        "pattern" => "/index",
        "action"  => "ControllerNamespace\\FooController::indexAction",
        "name"    => "foo_index"
    ),
    array(
        new Route(Route::$validMethods, '/', 'ControllerNamespace\\FooController::indexAction2', 'foo_index2')
    ),
);

GET

使用应用程序或MVC对象的 get() 方法创建通过HTTP GET方法调用URI的资源。

$mvc = new \MVC\MVC();
$mvc->get("/hello/[a:name]", function($name) {
    return "Hello $name.";
}, 'hello_get');

POST

使用应用程序或MVC对象的 post() 方法创建通过HTTP POST方法调用URI的资源。

$mvc = new \MVC\MVC();
$mvc->post("/hello/[a:name]", function($name) {
    return "Hello $name";
}, 'hello_post');

DELETE

使用应用程序或MVC对象的 delete() 方法创建通过HTTP DELETE方法调用URI的资源。

$mvc = new \MVC\MVC();
$mvc->delete("/hello/[i:id]", function($id) {
    return "DELETE $id";
}, 'hello_delete');

PUT

使用应用程序或MVC对象的 put() 方法创建通过HTTP PUT方法调用URI的资源。

$mvc = new \MVC\MVC();
$mvc->put("/hello/[i:id]", function($id) {
    return "PUT $id";
}, 'hello_put');

OPTIONS

使用应用程序或MVC对象的 options() 方法创建通过HTTP OPTIONS方法调用URI的资源。

$mvc = new \MVC\MVC();
$mvc->options("/hello/[i:id]", function($id) {
    return "OPTIONS $id";
}, 'hello_options');

HEAD

使用应用程序或MVC对象的 head() 方法创建通过HTTP HEAD方法调用URI的资源。

$mvc = new \MVC\MVC();
$mvc->head("/hello/[i:id]", function($id) {
    return "HEAD $id";
}, 'hello_head');

AJAX

使用应用程序或MVC对象的 ajax() 方法创建通过HTTP AJAX方法调用URI的资源。

$mvc = new \MVC\MVC();
$mvc->ajax("/hello/[i:id]", function($id) {
    return "AJAX $id";
}, 'hello_ajax');

路径分组

使用应用程序或MVC对象的group方法创建路径分组资源。这是为了将具有相同前缀的路径分组。

$mvc = new \MVC\MVC();
$mvc->group("/admin", function($route) use($mvc) {
    $mvc->get($route, function() {
        return "Admin index";
    }, 'admin_index');
    $mvc->get("$route/other", function() {
        return "Admin other route.";
    }, 'admin_other');
});

路径参数

有效路径变量类型

  • [i] 整数
  • [a] 字符串
  • [h] 十六进制
  • [*] 任何值
$mvc = new \MVC\MVC();
$mvc->ajax("/hello/[i:id]/[a:name]", function($id, $name) {
    return "AJAX id = $id, name = $name\n";
}, 'hello_id_name');

重定向

此功能将重定向到某个路径...

$mvc = new \MVC\MVC();
$mvc->get("/", function() use($mvc){
    $mvc->redirect('/redirect');
}, 'home_redirect');
$mvc->get("/redirect", function(){
    return "Redirect\n";
}, 'redirect');

提供者或服务

此部分是用于注册与Simple PHP MVC无关的其他服务,通过扩展 MVC\Provider\Provider 实现。例如:Doctrine对象关系映射器(ORM)、SwiftMailer、Monolog等。

<?php

namespace ProvidersNamespace;

use MVC\MVC,
    MVC\Provider\Provider;

class ExampleProvider extends Provider
{
    public function __construct(array options = array())
    {
	    parent::__contruct($options);
    }
    
    public function boot(MVC $mvc)
    {
	    //Configuraciones
    }

    public function register(MVC $mvc) 
    {
        // Registro de variables de uso o de servicios
        $app->setCvpp('example.name', get_class($this));
        
    }

}

其他方面

要使用Response、HttpRequest、View对象,有以下函数

view()

返回视图对象。

$mvc = new \MVC\MVC();
$view = $mvc->view();

request()

返回 MVC\Server\HttpRequest. 对象。

$mvc = new \MVC\MVC();
$request = $mvc->request();

response()

返回 \MVC\server\Response 对象。

$mvc = new \MVC\MVC();
$response = $mvc->response();

使用控制台

目前处于开发中。请等待2.0版本。

作者:

Ramón Serrano ramon.calle.88@gmail.com