php做爲後臺程序只提供數據,全部的展現都交給前臺
而前臺中數據和界面dom的雙向綁定使用angular。javascript
前端全給angluar進行掌控,php做爲後端只須要給angular提供數據
通常來講,jquery是用$.get來和後臺交互,angular是用$http , ngResource(RESTful APIs)來進行後臺交互
那麼我不想這樣,我但願前端直接調用後臺函數。
我想到了 hprose
因而前臺我這樣設計php
<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的入口函數)
第一個參數是調用的類和方法名
第二個參數是方法須要的參數
第三個參數是成功的回調函數css
(具體的hprose的 js和php的用法你們請看官網的github,特別裏面的README )html
下面要說後臺了,前端
//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的 watchjava
$scope.$watch('user' , function($new_data, $old_data){ server.mainInit("User@update" , $new_data ,function(){{ }}); })
個人本意是使用php模擬meteor作一個相似的東西,
今天的這個思路是一個副產品,不過我以爲這個方式進行項目開發的話也是能夠
你們有什麼建議嗎?jquery