jamm / mvc
Requires
- php: >=5.3.0
- jamm/http: >=1.0.0
This package is not auto-updated.
Last update: 2024-09-14 13:18:04 UTC
README
创建MVC设计应用程序的基接口和类
### 主要概念 它可以用作构建MVC应用程序的基。
这里最重要的是接口 - 架构的基础。
### 工作原理 请求被Front Controller解析后,传递给Router,然后从Router传递给Controller,Controller填充响应,然后将此响应返回给用户。
### 内置服务 内置了一些有用的模型
- Crypt - 用于密码散列和/或双向加密(基于mcrypt)。
- Sessions - 用于会话处理(默认为Redis,但可配置)。
- SessionAuthenticator - 与cookie和CSRF保护一起工作。实现了AngularJS XSRF-token保护机制,并为JSON响应添加了前缀。
如果您愿意,可以使用来自Models文件夹的一些服务 - 它们绝对有效,并且在实时项目中使用。
总的来说,这个库永远不会要求您的类扩展库中的类。主要建议 - 倾向于组合而非继承。
但“永不要求”并不意味着“不允许” - 如果您发现某些类足够好,可以用作基类 - 那就这么做,它们旨在以两种方式都很有用。
此外,在Views文件夹中还有模板渲染器(PHTML和Twig),欢迎使用它们。
但如果您不介意 - 看看AngularJS。使用AngularJS,您可以使用原生的HTML页面作为模板,由nginx或Apache(无需PHP)提供,因此您的应用程序将需要更少的服务器资源。这也意味着更少的页面重新加载(由于ajax请求) - 您的应用程序的性能和可用性将大大提高。
这只是个建议 :)
### 依赖项 Jamm\HTTP
PHP 5.3+
### 带自动填充路由的前端控制器示例
class Launcher
{
public function start(array $config = [])
{
$ServiceFactory = new ServiceFactory(new Config($config));
$ServiceLocator = new ControllersServiceLocator($ServiceFactory);
$FallbackController = new IndexPage();
$RequestParser = new RequestParser($ServiceFactory->getRequest());
$Response = $ServiceLocator->getResponse();
$Router = new AutoFillableRouter($RequestParser, $FallbackController);
$Router->fillRoutesFromList(new RoutesList($config['routes']), __NAMESPACE__.'\\Controller', new ControllerBuilder($ServiceLocator));
$Controller = $Router->getControllerForRequest();
$Controller->fillResponse($Response);
$Response->Send();
}
}
#### 自动填充路由的配置
{
"routes": {
"service": "ServiceAPI",
"user": "UserAPI",
"record": "RecordAPI"
}
}
#### 自动填充控制器的示例
class ServiceAPI extends AutoInstantiableController implements IRequireServiceLocator
{
public function fillResponse(\Jamm\HTTP\IResponse $Response)
{
$action = $this->ServiceLocator->getRequestParser()->getQueryArrayItem(1);
if ($action=='get_init_data')
{
$data = $this->ServiceLocator->getRedis()->get('data');
$Response->setBody($data);
}
}
}
### 不带自动填充路由的前端控制器示例
$RedisServer = new \Jamm\Memory\RedisServer();
$Request = new \Jamm\HTTP\Request();
$RequestParser = new \Jamm\MVC\Controllers\RequestParser($Request);
$TemplatesRenderer = new \Jamm\RedisDashboard\View\TemplatesRenderer();
$FallbackController = new Controller\Fallback($RedisServer, $TemplatesRenderer);
$Router = new \Jamm\MVC\Controllers\Router($RequestParser, $FallbackController);
$Response = new \Jamm\HTTP\Response();
$TemplatesRenderer->setBaseURL('/redis');
$Request->BuildFromInput();
$Router->addRouteForController('db', new Controller\Database($RedisServer, $RequestParser, $TemplatesRenderer));
$Router->addRouteForController('key', new Controller\DBKey($RedisServer, $RequestParser, $TemplatesRenderer));
$Response->setHeader('Content-type', 'text/html; charset=UTF-8');
$Controller = $Router->getControllerForRequest();
$Controller->fillResponse($Response);
$Response->Send();
### 带Twig模板渲染的普通(非自动填充)控制器示例
class Fallback implements \Jamm\MVC\Controllers\IController
{
private $Redis;
private $TemplatesRenderer;
public function __construct(\Jamm\Memory\IRedisServer $Redis,
\Jamm\MVC\Views\ITemplatesRenderer $TemplatesRenderer)
{
$this->Redis = $Redis;
$this->TemplatesRenderer = $TemplatesRenderer;
}
public function fillResponse(\Jamm\HTTP\IResponse $Response)
{
$StatsMonitor = $this->getNewStatsMonitor($this->Redis);
$stats = $StatsMonitor->getStats();
$databases = $StatsMonitor->getDatabases();
$template = $this->TemplatesRenderer->render_Twig_template(
'IndexPage.twig', array('databases' => $databases, 'stats' => $stats));
$Response->setBody($template);
}
/**
* @param \Jamm\Memory\IRedisServer $Redis
* @return \Jamm\RedisDashboard\Model\StatsMonitor
*/
protected function getNewStatsMonitor(\Jamm\Memory\IRedisServer $Redis)
{
return new \Jamm\RedisDashboard\Model\StatsMonitor($Redis);
}
}
### 许可证 MIT
在此,免费许可,任何获得本软件及其相关文档副本(“软件”)的人,在不限制的前提下,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本的权利,以及允许向软件提供的人这样做,但受以下条件约束
上述版权声明和本许可声明应包含在软件的副本或主要部分中。
软件按“原样”提供,不提供任何形式的保证,无论是明示的还是暗示的,包括但不限于适销性、特定用途适用性和非侵权性保证。在任何情况下,作者或版权所有者不对任何索赔、损害或其他责任负责,无论是基于合同、侵权或其他原因,源于、源于或与软件或其使用或其他交易有关。