craft-group/phpframework

此包的最新版本(dev-master)没有可用的许可证信息。

另一个PHP框架

dev-master 2019-09-27 08:48 UTC

This package is auto-updated.

Last update: 2024-08-27 20:54:11 UTC


README

自行组装的自行车,用于快速创建Web应用程序。PHP >= 5.4

项目结构和配置

app
	config
		app.php
		env.php
	controllers
	models
	views
public
	css
	im
	js
	.htaccess
	index.php

.htaccess

AddDefaultCharset UTF-8

Options +FollowSymLinks +ExecCGI

php_flag    display_errors          on
php_flag    display_startup_errors  on
php_value   error_reporting         2047
php_flag    magic_quotes_gpc        off

<IfModule mod_rewrite.c>

  RewriteEngine On

  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule ^(.*)$ index.php [QSA,L]

</IfModule>

index.php

<?php

require '../vendor/autoload.php';
new \framework\App();

配置设置存储在config文件夹中。env.php包含特定环境的设置(如数据库设置等),app.php包含应用程序的通用设置。

每个配置文件都必须返回一个设置数组。例如

<?php

return [
    'db' => [
        'dsn' => 'mysql:dbname=dbname;host=localhost;charset=utf8',
        'username' => 'root',
        'password' => 'password'
    ]
];

路由

为此,在配置文件app.php中描述规则。例如

<?php

return [
    'routes' => [
        ['^/$', 'HomeController'],
        ['^/profile', 'ProfileController']
    ]
];

在第二种情况下,所有以/profile开头的请求都会转发到控制器。额外的路由可以在控制器ProfileController内部完成。

控制器

框架中有一个基本类Controller,具有抽象方法abstract public function handle();。控制器类的名称应以Controller结尾。

<?php

class HomeController extends Controller
{
    public function handle()
    {
        $this->request->set('user', 'Вася Пупкин');

        return 'profile.php'; // для PHP представлений

        return 'profile.tpl'; // для Smarty представлений

        return array('profile.tpl', 'user', 'Вася Пупкин'); // для передачи в представление одной переменной

        return array('profile.tpl', array(
            'user' => 'Вася Пупкин',
            'city' => 'Дефолт сити'
        )); // для передачи в представление массива переменных

        return 'redirect:/success'; // для редиректа на другой URL
    }
}

还有一个在RouterController内部具有额外路由的控制器,具有抽象方法abstract protected function getRoutes();。路由规则设置类似于app.php中的规则,只是将控制器名称替换为方法名称。

class ProfileController extends RouterController
{
    protected function getRoutes()
    {
        return array(
            array('^/profile', 'index'),
            array('^/profile/(\d+)$', 'details')
        );
    }

    public function index()
    {
        return array('profile/index.tpl', ProfileModel::getAll());
    }

    public function details($id)
    {
        return array('profile/details.tpl', ProfileModel::get($id));
    }
}

模型和数据库操作

模型类的名称应以Model结尾。对于数据库操作,有一个名为Db的类,具有以下方法

public static function query($sql, $values = null);

public static function getValue($sql, $values = null);

public static function getRow($sql, $values = null);

public static function getRows($sql, $values = null);

public static function getPairs($sql, $values = null, $keyColumn = 'id', $valueColumn = 'name');

public static function update($sql, $values = null);

public static function insert($sql, $values = null);

public static function begin();

public static function commit();

public static function rollback();

public static function getLogs();

除了getPairs之外的所有方法都可以以下形式调用

<?php

$user = Db::getRow('SELECT * FROM user WHERE id = ?', 5);

$users = Db::getRows('SELECT * FROM user WHERE age BETWEEN ? AND ?', array(21, 35));

или

$users = Db::getRows('SELECT * FROM user WHERE age BETWEEN ? AND ?', 21, 35);

или

$users = Db::getRows('SELECT * FROM user WHERE age BETWEEN :from AND :to', array('from' => 21, 'to' => 35));

对于简单的表查询,有一个名为Entity的类,具有以下方法

public static function getRow($table, $id);

public static function getRows($table, $where = null, $order = null, $from = null, $count = null);

public static function save($table, $data, $idColumn = 'id');

public static function delete($table, $id);

使用示例

$user = Entity::getRow('user', 5); // равносильно $user = Db::getRow('SELECT * FROM user WHERE id = ?', 5);

$id = Entity::save('user', array('first_name' => 'Вася', 'last_name' => 'Пупкин'));

// равносильно
$id = Db::insert('INSERT user SET first_name = :first_name, last_name = :last_name', array('first_name' => 'Вася', 'last_name' => 'Пупкин'));

如果将id值传递给save方法,则会更新记录。

表单和验证

对于表单验证以及任何其他关联数组,有一个名为Validator的类。使用示例

<?php

if ($this->request->getMethod() == 'POST') {

    $validator = new Validator();
    $validator->add('username')->required('Please, enter value');
    $validator->add('password')->required('Please, enter value');

    if ($validator->validate()) {
        $data = $validator->getData(); // отвалидированные данные
    } else {
        $this->request->set('errors', $validator->getErrors()); // передача ошибок в отображение
    }
}

发送邮件

图像处理

缓存