今天的灵感大杂烩

433 查看

php作为后台程序只提供数据,所有的展示都交给前台
而前台中数据和界面dom的双向绑定使用angular。

前端全给angluar进行掌控,php作为后端只需要给angular提供数据
一般来说,jquery是用$.get来和后台交互,angular是用$http , ngResource(RESTful APIs)来进行后台交互
那么我不想这样,我希望前端直接调用后台函数。
我想到了 hprose
于是前台我这样设计


<html>
<head>
<script type="text/javascript" src="hprose.js" flashpath="/"></script>
<script src="//cdn.bootcss.com/angular.js/1.4.4/angular.js"></script>
<script>
var server = new HproseHttpClient("http://localhost/index.php", ["mainInit"]);
angular.module("demo" , [])
.controller( 'demoController' , function($scope){
    
    $scope.contents = "hehe";
     server.mainInit("User@login", {name:"personOne" , password:"1478520"} , function(result) {
         $scope.contents = result;
         $scope.$apply();
    });
 
});
</script>
</head>
<body ng-app="demo">
<div ng-controller="demoController">
    <h1 >{{contents}}</h1>
</div>
</body>
</html>

里面的server是一个全局的变量,以保证我能在angluar的各各controller中进行调用
server的mainInit方法(也是后台php的入口函数)
第一个参数是调用的类和方法名
第二个参数是方法需要的参数
第三个参数是成功的回调函数

(具体的hprose的 js和php的用法大家请看官网的github,特别里面的README )

下面要说后台了,

//index.php
<?php
    require_once('../src/Hprose.php');
    require_once(  __DIR__ .'/vendor/autoload.php');
    function mainInit($class_action,$args) {
        $info = explode('@' , $class_action);
        $className = "app\\".$info[0];
        $method = $info[1];
        $object  = new $className;
        return $object->$method($args);
    }
    
    $server = new HproseHttpServer();
    $server->setErrorTypes(E_ALL);
    $server->setDebugEnabled();
    $server->addFunction('mainInit');
    $server->start();

这个的写法就是 hprose 的server端写法
这里我用了composer的自动加载 ( composer请看岁寒老师的博客
我的想法就是js直接调用php的函数,进行获取数据至于怎么调用php,这个交给hprose.
后台要做的就是获取数据交给前台
至于后台如何进行规划,就类似与一般的php框架了
我觉得这个想法有点类似与restful,但也不太一样,
比如我不需要考虑请求方式对应的操作方式.
之所以有这个想法是最近公司要用meteor,meteor给了我这个启发。
比如如果前端的数据变动了
使用angular的 watch

    $scope.$watch('user' , function($new_data,  $old_data){
        server.mainInit("User@update" , $new_data ,function(){{
            
        }});
    })

我的本意是使用php模拟meteor做一个类似的东西,
今天的这个思路是一个副产品,不过我觉得这个方式进行项目开发的话也是可以
大家有什么建议吗?