####Hello world
确保你的配置文件没有问题并且nginx已经重启过,我想我们就可以开始potato之旅了
修改你的hosts文件,Linux/unix在/etc/hosts,添加以下一条记录: server_name(你的conf文件里面定义的server_name) 127.0.0.1
重启浏览器,访问 http://server_name/
如果你看到 "oh,no,they kill Kenny" 的字样,祝贺你已经成功了第一步
"oh,no,they kill Kenny"来自我非常喜欢的一部美国政治讽刺剧《南方公园》中每集开头必死下一集开头必复活的角色Kenny在每次死后他的伙伴们常常会说的一句话(听起来很绕是吧我也觉得:) )
你的项目的文件夹下有三样东西,potato,app文件夹和index.php文件,其中,potato文件夹中是整个potato的框架的代码,如果您并不熟悉potato的代码,请不要试图改动这个文件夹,这可能会导致框架出现不可预计的错误
app文件夹则是您的主场,您的大部分开发活动将集中在这里,您不需要建立controller,model,log,router.php等文件,我们已经帮您搭建好了按照potato标准的文件结构部署的项目骨架,同时,我们已经将您很可能使用到的jquery和jquery的一些插件部署到了static文件夹下,您在开发时无需再从网上搜索下载这些插件和源码,直接引用即可
####路由控制 定义路由的文件是router.php,在这里面,你可以以多种方式定义路由:
第一个参数是请求的URL,第二个参数是该URL绑定的对应控制器,其中,类名与方法之间以@符号分隔
- 单路由
Router::get('/','viewController@index');
Router::get('/home','viewController@home');
Router::post('/login','userController@login');
- 组路由
Router::get(array(
'/'=>'viewController@index',
'/home'=>'viewController@home',
'/login'=>'userController@login'
));
- 全路由(响应GET与POST)
Router::any('/','viewController@index');
######过滤器 过滤器的作用是在请求某个控制器之前做一些但不限于检查性质的工作,比如检查用户是否有权限访问该URL
想想如果没有过滤器,那么在每个方法的最前面就要加上重复的,累赘的检查权限的代码,那该是多么可怕的场景
重复的代码是魔鬼 --《重构的艺术》
首先,将你要检查权限的路由存入一个关联数组中,如
$authURL=array(
'GET'=>array('/','/home'),
'POST'=>array('/login')
);
使用回调函数将其与一个匿名函数绑定
Router:;filter($authURL,function(){
if(!isset($_SESSION['state']) || $_SESSION['state']>0){
Response::redirect('/','您尚未登陆,请登陆后执行此操作');
}
});
####命名规范 potato也从Ruby On Rails 中参考了很多东西,其中一点便是约定比灵活更重要 在potato中,我们约定:
- 控制器必须以XXController.php命名
- 模型以xxModel.php来命名
- 代码中的类名必须和文件名一致
如果不按照potato的命名规范进行开发,框架将不能正常工作
####响应POST与GET 如果你的路由正确,你的URL请求将会精确地转发给对应的类方法。请求 中常常携带GET/POST参数,那么在potato中如何获得这些参数呢?
事实上,你完全可以使用$_GET和$_POST这两个PHP中的超级变量获取get/post参数,然而这是不推荐的,因为web并不是绝对安全的,互联网中不怀好意的暗流随时都有可能在请求中携带一些含有sql注入攻击的危险元素,这让人感到不安.所幸的是,potato已经为你考虑到这些,potato将这些请求进行一些安全检查和过滤,将处理后无危险的数据重新包装成数组存入Request中
#####获取POST参数
Response::$POST['paramName']
#####获取GET参数
Response::$GET[1]
GET参数是通过重写URL获取的,传统的GET URL如/article.php?id=101可以获得id=>101这个键值对,而重写后的URL /article/id/101中,是无法获得id的,只能获得101,所以potato中GET不能用传统的/URLPATH.php?querykey=queryvalue 这样的形式的
Response::$GET[0]是请求的URL全名,从1以后是依次匹配的URL参数
####数据库查询 我们已经在底层对mysql进行了封装,在xxModel类内部,你只需要简单的使用$this->query();便可以获得sql语句以关联数组形式返回的查询结果
如果您执行的是insert或者update等非查询语句,$this->query()方法一样有效
####渲染视图 所有的视图文件都应该存放在template目录下
对于视图文件example.php, 在控制器中使用以下语句渲染
Response::render_template('example.php',array('exdata'=>'exam'))
render_template的第二个参数的类型是一个关联数组,该数组的key在视图中会自动变成局部变量,比如在excample.php中输出exam这个数据是这样的
<?php echo $exdata; ?>