groucho75/phmisk

Php Html5 微型启动套件

v0.6-alpha 2014-09-02 13:32 UTC

This package is auto-updated.

Last update: 2024-09-26 20:26:18 UTC


README

Phmisk (/piː eɪtʃ miːsk//f miːsk//wɑtˈevər//wɒt ðə fʌk/) 是一个 Php/Html5 微型启动套件。Phmisk 准备与以下内容协同工作:

  • html5 UI:Html5boilerplate 和 Twitter Bootstrap,来自 Initializr
  • 一个路由器:bramus/router (1)
  • 一个数据库层:Sparrow (1)
  • 一个简单的会话管理器
  • 一个简单的模板引擎
  • MVC 模式

(1) Phmisk 默认不包含这些库,您需要使用 Composer 安装它们。当然,使用 Composer,您还可以包括和使用其他库。

您可以通过查看 维基 来找到一些教程和指南。

入门

先决条件

您需要在您的计算机上安装 Composer

安装方法 #1 (Github)

  1. 下载并解压此存储库

  2. 进入 phmisk-master 文件夹并启动 Composer install 以解决和下载所需包

    $ composer install  
    

安装方法 #2 (Packagist)

  1. 打开终端并转到您的 web 服务器

  2. 运行以下命令

    $ composer create-project groucho75/phmisk my_project -s dev
    
  3. 您将在您的 web 服务器中找到新的可使用 my_project 文件夹:它包含所有文件,包括 Composer 下载的依赖项

开始编辑

  • 编辑 app/config.php(数据库连接设置,php 配置...)
  • 在主 app/routes.php 中添加您的路由

$ph4

您可以通过编辑 app/routes.php 来编写应用程序。

您可以使用一个名为 $ph4 的 Phmisk 对象,该对象包含主要库的实例。在此页面上,您可以阅读有关如何使用这些库的说明。

您是对的,$ph4 代表 'ph' 加 4 个字符 ('misk')。

路由

路由

在主 app/routes.php 中添加最简单的路由

$ph4->router->get('/hello', function() {
	
	echo 'Hello world!';
	
});

然后您可以通过访问 your-site.com/hello 来查看它。

自定义控制器

您可以将自定义控制器/方法映射为路由:将您的控制器放在 app/controllers 中,它们将自动加载。然后,您必须在 app/routes.php 中添加路由语句:这里是由自定义控制器提供的路由,名为 Demo

$demo = new App\Controllers\Demo();

$ph4->router->get('/test', function() use ( $demo ) {
	
	$demo->test();
});

Demo 控制器文件位于 app\controllers\Demo.php 中,包含类似以下内容:

namespace App\Controllers;

class Demo extends Base
{	
	function test() 
	{
		echo 'This page has been created by Test method of Demo custom controller';			
	}

}

Base 控制器是一个您可以扩展以具有共享方法的父类。

注意:如果您添加了新的控制器文件,您需要运行一个命令来更新 Composer 自动加载映射

   $ composer dump-autoload

参考

有关使用方法和更多示例(动态路由模式、挂载路由...),请参阅 路由器主页:bramus/router

模板(视图)

Phmisk 具有简单的模板引擎来显示视图文件。要在路由中使用模板引擎,您必须在函数中添加 use ($ph4),然后您可以使用它作为 $ph4->view

app/routes.php 中的一个路由可以是:

$ph4->router->get('/hello/(\w+)', function($name) use ( $ph4 ) {
	
	$ph4->view->assign( 'name', $name );
	$ph4->view->render( 'hello' );
	
});

模板文件,ui/hello.php,可以是:

<?php include __DIR__.'/header.php' ?>

	<div class="container">
		<div class="page-header">
		
			<h1>Hi <?=$name?></h1>
			
		</div>
		<p class="lead">You are welcome!</p>
	</div>

<?php include __DIR__.'/footer.php' ?>

您可以通过访问 your-site.com/hello/johnny 来查看它。

请注意,模板文件是PHP文件,因此您可以自由使用PHP语句。PHP模板文件通常位于公开的ui文件夹中,与资源(js、css、图片)一起:您可以将模板文件移动到另一个文件夹(例如app/views),在index.php中设置可选的VIEWS_PATH常量。

参考

在路由中,您必须使用2个函数

// Assign a variable
$ph4->view->assign( 'name', $name );

// Assign a group of variables
$vars = array( 'name' => 'Foo', 'surname' => 'Bar' );
$ph4->view->assign( $vars );

// Assign a variable, and clean XSS
$ph4->view->assign( 'name', $name, true );

// Echo the ui/home.php view file
$ph4->view->render( 'home' );

// Return the ui/home.php view file as a string
$output = $ph4->view->render( 'home', true );

模板引擎使用PHP文件作为视图

在视图文件中,您可以直接像在PHP中一样打印变量

// Quick php echo
<strong><?=$name?></strong>

// Clean XSS and print
<strong><?php safe_echo($name)?></strong>

在视图文件中,您可以使用标准的PHP包含其他视图文件,例如

<?php include __DIR__.'/header.php' ?>

有关更多信息,请浏览视图类

数据库层

Phmisk使用一个简单的数据库工具包。

首先,在app/config.php中设置数据库连接设置。

在此blog路由中,您会获取一些帖子并将它们准备好发送到布局

$ph4->router->get('/blog', function() use ( $ph4 ) {

	$posts = $ph4->db->from('posts')
			->select('title')
			->limit(5)
			->many();

	$data = array(
		'pagetitle' => 'My posts',
		'posts'		=> $posts,
	);
	
	$ph4->view->assign( $data, true );	
	$ph4->view->render( 'blog' );    
});

请注意,您必须在函数中添加use ($ph4),然后您可以将其用作$ph4->db。数据库连接参数设置在app/config.php中,连接在app/bootstrap.php中启动。

仅出于对知识的渴望,以下是博客模板文件,ui/blog.php

<?php include __DIR__.'/header.php' ?>

	<div class="container">
	
		<div class="page-header">
			<h1><?=$pagetitle?></h1>
		</div>
		
		<ul class="lead">
			<?php
			if ( is_array($posts) )
			{
				foreach( $posts as $post )
				{
					echo '<li>'. $post['title'] .'</li>';
				}
			}
			else
			{
					echo '<li>No post yet</li>';
			} ?>
		</ul>
	</div>

<?php include __DIR__.'/footer.php' ?>

自定义模型

您可以创建自己的模型类:将您的类放在app/models中,它们将被自动加载。提供的数据库层Sparrow可以使用自定义类来处理对象。

注意:如果您添加了新的模型文件,您需要运行命令来更新Composer的自动加载映射

   $ composer dump-autoload

参考

有关用法和更多示例,请参阅数据库层主页:Sparrow

会话

Phmisk附带了一个简单的PHP会话管理包装器。它帮助启动和销毁会话,设置和删除会话变量。它帮助使用“flash”变量:仅在下一次轮次中存在的会话数据(例如反馈和用户消息)。

参考

// Init the session
$ph4->sess->start();

// Set a session var
$ph4->sess->set('my_var', 1);

// Set a flash var (it will exist till next round)
$ph4->sess->setFlash('my_flash_var', 1);

// Get a session var (the 2nd argument is a default if var not found)
$ph4->sess->get('my_var', 0);

有关更多信息,请浏览会话类

文件结构

phmisk root/
  |
  |__ app/
  |      |__ classes/  
  |      |__ controllers/
  |      |__ core/    
  |      |__ models/
  |      |__ (vendor/)
  |      |
  |      |__ bootstrap.php
  |      |__ config.php
  |      |__ helpers.php  
  |      |__ routes.php
  |
  |__ ui/
  |      |__ css/
  |      |__ fonts/  
  |      |__ img/  
  |      |__ js/    
  |      |
  |      |__ (php view files)  
  |
  |__ composer.json
  |__ index.php
  |__ .htaccess  

app/controllers文件夹包含所有您的自定义控制器和一个Base控制器。app/core文件夹包含一些重要的捆绑库(例如核心Phmisk类)。app/classes文件夹包含可选的类:当然,您可以将您自己的类添加到此处,无论是您自己制作的还是无法在远程存储库中找到的,并且它们将被自动加载。app/models文件夹包含所有您的自定义模型类。将app文件夹移至网站脚本的上方或外部可能是一个好主意。

ui包含所有Html5boilerplate和Twitter Bootstrap文件夹和文件,使用Initializr生成并编辑以在Phmisk中工作。然后,还有一些PHP视图文件:页眉、主页、页脚...

Phmisk不附带库(路由器、模板、ORM)。您必须使用Composer来安装它们。之后,将出现一个新的app/vendor文件夹。

app文件夹包含一些重要文件

  • config.php:在此处您可以设置数据库参数和其他设置;
  • bootstrap.php:在此处初始化主要的Phmisk类;
  • helpers.php:此文件包含一些您可以在任何地方使用的有用函数。
  • routes.php:在此处您可以设置应用程序路由。

高级设置

设置常量

index.php中您可以编辑一些重要的常量

  • ENV(默认:'dev'):应用程序环境:dev(开发)、test、live(生产)。您可以使用它根据环境调整应用程序行为:例如数据库设置、显示/隐藏错误。
  • APP_PATH(默认:'app'):'app' 文件夹的路径,不带斜杠。此文件夹包含所有库和类。出于安全考虑,您应该将其移动到公共网络根目录之外(见下一段)。
  • UI_PATH(默认:'ui'):'ui' 文件夹的路径,不带斜杠。此文件夹包含所有 html/css/js 资产和 php 视图。它必须是公开的和可访问的。
  • VIEWS_PATH(默认:与 UI_PATH 相同):php 模板文件(视图)文件夹的路径,不带斜杠。此文件夹包含所有 php 视图。在标准设置中,您不需要定义它,因为稍后在引导程序中定义了它,并且与 UI_PATH 一致;否则,您可以在 index.php 中定义它:例如,将其移动到公共网络根目录之外,如 APP_PATH.'/views'

保护应用文件夹

出于安全考虑,将应用文件夹(app)移动到网络根目录之外/之上可能是个好主意。

在此示例设置中,应用文件夹已被移动到网络根目录之上的一级

  • 您必须在 index.php 中设置它
define('APP_PATH', '../app');
  • 您必须在 composer.json 中的配置和自动加载部分中设置它
	"config": {
        "vendor-dir": "../app/vendor"
    },
    ...
    "autoload": {	
        "classmap": ["../app/core/", "../app/controllers/", "../app/classes/", "../app/models/"],
        "files": ["../app/helpers.php"]
    }	
  • 然后,别忘了启动 composer install
$ composer install

包含更多包

PHP 包

要包含来自 Packagist(主要 Composer 存储库)的更多 PHP 包,您可以在 composer.json 中的 require 部分中简单添加它们,然后启动 Composer 更新

	"require": {
		...
		"monolog/monolog": "1.0.*"
	},

然后,在主 app/routes.php 中,您可以通过写入来开始使用它

$log = new Monolog\Logger('name');

如果您想使用其他包代替标准包(例如另一个模板引擎),您必须在 composer.json 中的 require 部分中设置它们,然后更改 app/bootstrap.php 中的初始化。

您可以通过 Composer 安装库,不仅来自 Packagist,还可以来自例如 Github:这里是一个 示例

JavaScript 库

如果您需要 JavaScript 库,当然您可以通过 Composer 获取它们,或者您可以将它们下载并放入 ui 文件夹中,或者直接从模板文件中链接它们的 CDN。

教程 & 示例

请参阅 Wiki,以找到有关添加新包的一些教程。

部署到生产环境

当您准备好将 phmisk 网站部署到生产服务器时,请按照以下步骤操作

  1. 当然,在生产服务器上复制所有文件;
  2. index.php 中将 ENV 设置为 live
  3. 在生产服务器上运行以下命令(--optimize-autoloader 标志 = 更快的 Composer 自动加载;--no-dev 标志 = 开发包将不会安装)
$ composer install --no-dev --optimize-autoloader

注意:请确保还上传了 composer.lock 文件,并且只在生产服务器上运行 Composer install:这样,开发包将被忽略,并且您可以确保生产服务器上安装的包版本与您开发的版本一致。因此,永远 不要在生产服务器上运行 Composer update

如果您无法通过 shell 访问生产服务器,您可以在本地服务器上运行命令(步骤 3),然后上传所有文件到生产服务器。

欢迎捐款

如果您喜欢我的辛勤工作,当然您可以通过 向我捐款

并且不要忘记向 Phmisk 使用其他库的作者捐款(见上方的存储库和链接)。