上一篇:Lysine介绍(二)载入及配置
太阳底下没有新鲜事,MVC也不是
Lysine的MVC灵感来自webpy ,即使说是模仿也没错
在源代码 目录里面的demo/helloworld下有一个简单的实例
要运行Lysine的MVC,需要url rewrite支持,可以在demo的config目录下参考nginx.conf文件
这个MVC实现包含了Application、Router、Controller,这里先说Application
分配给Application职责是:
初始化环境非常简单,只是告知app需要从哪些路径下搜索类对应的文件
<?php $app = \Lysine\Application::instance(); // or $app = app(); $app->includePath(array('/path1', '/path2'));
知道了路径,Application自带的autoloader就可以在这些路径下搜索并载入类,
文件名解析规则很简单,例如
\Controller\User -> controller/user.php
\Controller\User\Login -> controller/user/login
\Controller\User_Login -> controller/user.php
\Model\User -> model/user.php
namespace会被转换为目录名,class名字中"_"后的内容被忽略
如果搜索的路径有/path1和/path2
先找/path1/controller/user.php
再找/path2/controller/user.php
找到哪个包含哪个
规则只有这么一条,无论是controller类、model类还是其它类都一视同仁
所以项目的文件目录结构没有任何强制要求,你可以按照自己的想法组织目录
你可以采用
<?php /* /project/path |-- app | |-- controller | `-- view | `-- model |-- config |-- lib `-- public `-- index.php */ app()->include('/project/path/app');
也可以
<?php /* /project/path |-- config |-- controller |-- lib |-- model |-- public | `-- index.php `-- view */ app()->include('/project/path');
如果你想自己定义一套autoloader,可以
<?php function my_autoloader() { /* ... */ } app()->setAutoLoader('my_autoloader');
一旦应用了新的autoloader,Application自带的autoloader就会被注销掉
Lysine自带了webpy风格的Router,但是也是可以被替换的,你可以用
<?php // 自定义的Router必须继承自\Lysine\Router_Abstract class MyRouter extends \Lysine\Router_Abstract { public function dispatch($url, array $params = array()) { /* ... */ } } app()->setRouter(new MyRouter());
还是那句话,尽量实现机制而不是策略,如果实现了策略,那么应该可以被替换
在Controller里面:
<?php class \Controller\Example { public function get() { return app()->redirect($new_url); } }
即可重定向到新url上