simple-php-mvc / simple-php-mvc-app
Simple PHP-MVC 应用程序
Requires
- php: >=5.3.3
- simple-php-mvc/installer-module: >=0.1
- simple-php-mvc/simple-php-mvc: >=1.6
- symfony/debug: ^3.0
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(); } }
路由、视图和控制器
- 路由
- 在
app/config/routes.php或app/config/routes.json文件中,您可以配置您想要配置的路由的操作。
- 视图
- 视图应该是扩展名为
.html或.php的文件。- 如果您使用控制器来显示视图,则这些文件的名称应与控制器的操作相同。例如:操作/控制器
index,文件/视图index.html- 这些文件必须存储在
MVC\MVC实例的 templates_path 配置中指定的目录中,名称为控制器类的名称(不包含 Controller)。例如:目录类其中类 -> ClaseController。
- 控制器
- 建议每个控制器都从
MVC\Controller\Controller继承。- 每个控制器的返回值应该是
字符串或类型为关联数组的变量,值可以是任何类型。- 要向视图发送多个变量,可以是任何类型,控制器必须在
array()函数内返回这些变量。例如:$variable1, $variable2, $variable3return 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.json 或 routes.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