koine/mvc

另一个MVC框架

1.0 2015-08-15 23:43 UTC

This package is not auto-updated.

Last update: 2024-09-14 15:52:51 UTC


README

一个非常简单的MVC框架。

代码信息

Build Status Coverage Status Code Climate Scrutinizer Code Quality

包信息

Latest Stable Version Total Downloads Latest Unstable Version License Dependency Status

骨架应用

要使用应用,请克隆 骨架应用 或遵循其composer安装指南。

用法

<?php
// index.php or something


// set request
$env     = new \Koine\Http\Environment($_SERVER);
$cookies = new \Koine\Http\Cookies($_COOKIE);
$session = new \Koine\Http\Session($_SESSION);
$params  = new \Koine\Http\Params($_REQUEST);

$request = new \Koine\Http\Request(array(
    'environment' => $env,
    'cookies'     => $cookies,
    'session'     => $session,
    'params'      => $params,
));

// set view
$view = new \Koine\Mvc\View();
$view->getConfig()->addPath(__DIR__ . '/views');

// set front controller
$frontController = new \Koine\Mvc\FrontController();
$frontController->setRequest($request)
    ->setController('MyApp\HelloWordController')
    ->setAction('sayHello')
    ->setView($view);

$response = $frontController->execute();
$response->send();

exit();

控制器

<?php

namespace MyApp;

use Koine\Mvc\Controller;

class HelloWorldController extends Controller
{
    public function beforeAction()
    {
        // do something, like check for logged user
        $this->getRequest()->getSession();

        if (!$session['user_id']) {
            throw new \MyApp\AccessDeniedException("User is not logged");
        }
    }

    public function sayHello()
    {
        $this->view->setLayout('layouts/application');

        $this->render->('hello_world/say_hello', array(
            'message' => 'Hello World!'
        ));

        // or

        $this->getResponse()->setBody('Hello World!');
    }

    public function redirectToHome()
    {
        $this->getResponse()->redirectTo('/');
    }
}

布局

<!-- layouts/application.phtml -->
<h1>Some Layout!</h1>

<?= $this->render($this->view, $this->localVariables) ?>

注意,为了在布局中渲染视图,您必须 必须 传递 $this->view$this->localVariables 变量,以便在视图中可用

视图;

<!-- hello_word.phtml -->
<p><?= $message ?></p>

测试

namespace MyAppTests;

use Koine\Test\Mvc\ControllerTestCase;

class HelloWordControllerTest extends ControllerTestCase
{
    public function setUp()
    {
        $this->setUpController('MyApp\\HelloWordController');
    }

    public function testSayHelloWhenUserIsLoggedIn()
    {
        $session = array('user_id');
        $params = array();

        $this->getRequest('sayHello', $params, $session);
        $this->assertResponseCode(200);
    }

    /**
     * @expectedException MyApp\AccessDenied
     */
    public function testThrowsExceptionWhenUserIsNotLoggedIn()
    {
        $this->getRequest('sayHello', $params, $session);
    }

    protected function testRedirectsToHome()
    {
        $this->getRequest('rediresctsToHome');

        $this->assertResponseIsRedirect();
        $this->assertResponseRedirectsTo('/');

        // or

        $this->assertTrue($this->getResponse()->isRedirect());
        $headers = $this->getResponse()->getHeaders();
        $this->assertEquals('Location: /', $headers['Location']);
    }
}

安装

通过Composer

将库添加到您的composer.json中的requirements键。

{
    // composer.json
    // [..]
    require: {
        // append this line to your requirements
        "koine/mvc": "~0.9.7"
    }
}

替代安装

  • 学习 composer。您不应寻找替代安装。这值得花费时间。相信我 ;-)
  • 遵循 此组说明

问题/功能建议

在此处 是问题跟踪器

贡献

只有TDD代码将被接受。请遵循 PSR-2代码标准

  1. 分支
  2. 创建您的功能分支(git checkout -b my-new-feature
  3. 提交您的更改(git commit -am 'Add some feature'
  4. 推送到分支(git push origin my-new-feature
  5. 创建新的Pull Request

如何运行测试

phpunit --configuration tests/phpunit.xml

要检查代码标准,请运行

phpcs --standard=PSR2 lib
phpcs --standard=PSR2 tests

许可证

MIT

作者