koine / mvc
另一个MVC框架
1.0
2015-08-15 23:43 UTC
Requires
- php: >=5.4
- koine/http: ~0.9.3
- koine/view: ~0.9.5
- nurse/di: 0.9.*
Requires (Dev)
- phpunit/phpunit: *
- satooshi/php-coveralls: dev-master
README
一个非常简单的MVC框架。
代码信息
包信息
骨架应用
要使用应用,请克隆 骨架应用 或遵循其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" } }
替代安装
问题/功能建议
在此处 是问题跟踪器。
贡献
只有TDD代码将被接受。请遵循 PSR-2代码标准。
- 分支
- 创建您的功能分支(
git checkout -b my-new-feature
) - 提交您的更改(
git commit -am 'Add some feature'
) - 推送到分支(
git push origin my-new-feature
) - 创建新的Pull Request
如何运行测试
phpunit --configuration tests/phpunit.xml
要检查代码标准,请运行
phpcs --standard=PSR2 lib phpcs --standard=PSR2 tests