+ -
当前位置:首页 → 问答吧 → 听说有选美,俺发布一下LeoPHP的Controller.php

听说有选美,俺发布一下LeoPHP的Controller.php

时间:2008-09-20

来源:互联网

事先声明
1、俺水平不高,代码质量不高的话,请指教。
2、俺英文不好,有狗屁不通的英文,请指教。
3、俺美学不好,有写的不靓的地方,请指教。
4、俺人品不好,就不发整个核心了,请海涵。

[php]
<?php
/**
* Controller of LeoPHP
*
* LeoPHP core Controller, call application Model and View, run application controller/action
*
* @copyright HentStudio, 2008
* @author Leo <[email protected]>
* @package LeoPHP
* @version $Id: Controller.php,v 0.2.1 2008/09/10 12:00:00 uw Exp $
*/
class Controller {
    /**
     * model - from application Model
     * @var class
     * @access public
     * @example In application Controoler: $this->model->query($sql);
     */
    public $model;
    /**
     * view - from core view to display application template file
     * @var class
     * @access public
     * @example In application Controoler: $this->view->display();
     */
    public $view;
    /**
     * view_var - from application Controller to core View var
     * @var array
     * @access public
     * @example in template file $this->var['data'] is from application $this->view_var['data']
     */
    public $view_var;
    /**
     * current Controller
     * @var string
     * @access protected
     * @static
     */
    protected static $_controller;
    /**
     * current Controller/action
     * @var string
     * @access protected
     * @static
     */
    protected static $_action;
    /**
     * default config - overwrite by user config from $this->config('userconfigfile');
     * @var array
     * @access private
     * @static
     */
    private static $_config = array(
        'APP_NAME' => 'LeoPHP',
        'APP_INDEX' => 'index.php',
        'APP_PATH' => '.',
        'LEOPHP_PATH' => '..',
        'CONTROLLER_SUFFIX' => 'Controller',
        'ACTION_SUFFIX' => 'Action',
        'MODEL_SUFFIX' => 'Model',
        'VIEW_SUFFIX' => 'View',
        'VIEW_EXT' => '.phtml',
        'VIEW_SKIN' => 'default',
        'VIEW_LAYOUT' => 'layout',
        'DB_CHARSET' => 'utf8',
        'DB_PREFIX' => NULL,
        'DB_OPTION' => NULL
    );
    /**
     * files - loadfiles counts
     * @var int
     * @access public
     * @static
     */
    public static $files;
    /**
     * application start microtime
     * @var float
     * @access privat
     * @static
     */
    private static $start_time;
    /**
     * run controller/action, When $node=NULL, $node=$_GET[controller]/$_GET[action]
     * @param string $node
     * @access public
     * @throws $this->_error($code)
     */
    public function run($node = NULL) {
        /* start */
        try {
            if(!self::$start_time) { self::$start_time = microtime(1); }
            $this->loadFile(self::$_config['LEOPHP_PATH'] . '/Function.php');    /* load core function */
            $this->_urlRouter($node);   /* url dispatch */
            $controller = ucfirst(self::$_controller) . self::$_config['CONTROLLER_SUFFIX'];
            $this->loadFile(self::$_config['APP_PATH'] . '/c/' . $controller . '.php');     /* load application Controller */
            if(class_exists($controller)) {     /* class Controller exists */
                $app = new $controller();
                $action = self::$_action . self::$_config['ACTION_SUFFIX'];
                if(method_exists($app, $action)) {      /* action in Controller exists */
                    $app->_init();      /* call init */
                    $app->$action();    /* call controller/action */
                } else {
                    $this->_error('003', self::$_action);   /* throw action not exists error */
                }
            } else {
                $this->_error('002', self::$_controller);   /* throw controller not exists error */
            }
        } catch (Exception $e) {    /* error found */
            die($e->getMessage());
        }
    }

    /**
     * load config
     * @param string $file
     * @access public
     * @example $app->config('i/config.php');
     */
    public function config($file) {
        self::$_config = array_merge(self::$_config, $this->loadFile($file));
    }
    /**
     * load file - core file or application file
     * @param string $node
     * @access public
     * @return $file
     * @throws $this->_error($code)
     * @todo files++
     */
    public function loadFile($file) {
        if(is_file($file)) {
            self::$files++;
            return require_once $file;
        } else {
            $this->_error('001', $file);
        }
    }
    /**
     * processing error
     * @param ini $code
     * @param string $msg
     * @access public
     * @throws $this->_error($code)
     * @todo 1. nice throw
     * @todo 2. error Logs
     */
    protected function _error($code, $msg = NULL) {
        $error = array( /* array of default error infomation */
            '001' => 'Cannot load file',
            '002' => 'Non-existent Controller',
            '003' => 'Non-existent Action');
        if(isset(self::$_config['ERROR_FILE'])) {   /* load user defined error infomation */
            $error = array_merge($error, $this->loadFile(self::$_config['ERROR_FILE']));
        }
        throw new Exception('Error[' . $code . ']: ' . $error[$code] . ' <b>' . $msg . '</b>');
    }
    /**
     * Controller init
     * @access protected
     */
    protected function _init() {
    }
    /**
     * dispath url to have controller action and so on ...
     * @param string $url
     * @access public
     * @throws $this->_error($code)
     * @todo all in one processing URL_MODEL(rewrite,pathinfo,normal)
     */
    public function _urlRouter($url = NULL) {
        $url = isset($url) ? ('/' . $url) : (isset($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : '');
        $get = explode('/', $url, 4);   /* get controller, action and others */
        self::$_controller = $_GET['controller'] = (isset($get[1]) ? $get[1] : 'index');    /* default controller */
        self::$_action = $_GET['action'] = (isset($get[2]) ? $get[2] : 'index');    /* default action */
        if(!empty($get[3])) {   /* processing other $_GET */
             $get_other = explode('/', $get[3]);
             $c = sizeof($get_other);
             if($c%2) { $get_other[$c] = NULL; }    /* pair of $_GET */
             for($i=0; $i<$c; $i++) {
                $_GET[$get_other[$i]] = $get_other[++$i];
            }
        }
    }
    /**
     * call core View to display template file to client
     *
     * update view to Extends class 2008/09/16
     *
     * @param string $template_file
     * @access public
     */
    public function view($template_file = NULL) {
        if(empty($template_file)) {
            $template_file = self::$_controller . '/' . self::$_action;
        }
        $this->loadFile(self::$_config['LEOPHP_PATH'] . '/View.php');
        $view = ucfirst(self::$_config['VIEW_SKIN']) . self::$_config['VIEW_SUFFIX'];
        $this->loadFile(self::$_config['APP_PATH'] . '/v/' . $view . '.php');
        $this->view = new $view();
        /**
         * path in View
         *
         *   APP:  absolute path of APP, app root path (not use)
         *  HERE:  relative path of SKIN, to Layout, template in php include
         *  ROOT:  absolute path of SKIN, to link image,css,javascript in template
         * INDEX:  absolute path of APP index file, to links in template
         */
        $view_root = pathinfo($_SERVER['SCRIPT_NAME']);
        $this->view->path = array(
            'APP'   => $view_root['dirname'],
            'INDEX' => $view_root['dirname'] . '/' . self::$_config['APP_INDEX'],
            'ROOT'  => $view_root['dirname'] . '/v/' . self::$_config['VIEW_SKIN'],
            'HERE'  => self::$_config['APP_PATH'] . '/v/' . self::$_config['VIEW_SKIN']);
        /**
         * var in view
         *
         *    var:  var in template (not user)
         *   node:  node to layout called
         * layout:  call template file as layout output to client
         */
        $this->view->var = &$this->view_var;    /* Controller view_var to template var */
        $this->view->node = $this->view->path['HERE'] . '/' . $template_file . self::$_config['VIEW_EXT'];
        $this->view->layout = $this->view->path['HERE'] . '/' . self::$_config['VIEW_LAYOUT'] . self::$_config['VIEW_EXT'];
        /* Load Helper */
        $this->view->layout();        /* layout output */
    }
    /**
     * model (for MySQL)
     * @param string $model
     * @access public
     * @todo 1. must be a return, not a call!
     * @todo 2. queries++
     */
    public function model($model) {
        $this->loadFile(self::$_config['LEOPHP_PATH'] . '/Model.php');
        $model = ucfirst($model) . self::$_config['MODEL_SUFFIX'];
        $this->loadFile(self::$_config['APP_PATH'] . '/m/' . $model . '.php');
        $this->model = new $model(self::$_config['DB_DSN'], self::$_config['DB_USER'], self::$_config['DB_PASSWORD'], self::$_config['DB_OPTION']);
        $this->model->setDb_prefix(self::$_config['DB_PREFIX']);
        $this->model->exec("SET NAMES '" . self::$_config['DB_CHARSET'] . "' ");
    }
    /**
     * get usage resource
     * @return array('files'=>self::$files, 'bytes'=>memory_get_usage(), second=>self::$start_time, 'queries'=>$model::$queries)
     * @todo many of bugs :(
     */
     public function getUsage() {
         return array(
             'files' => self::$files++,
             //'queries' => Model::$queries,
             'bytes' => memory_get_usage(),
             'seconds' => microtime(1) - self::$start_time
         );
     }
}
[/php]

作者: 七月十五   发布时间: 2008-09-20

哇,最好给翻译一下,就好了.英文不好啥意思,看不懂..

作者: 521vicky20   发布时间: 2008-09-20

十五我看不懂啊

作者: Gareth   发布时间: 2008-09-20

赞一下。能不能再说一下是在哪里用的?

作者: 西安PHPer   发布时间: 2008-09-20

原帖由 西安PHPer 于 2008-9-20 19:39 发表
赞一下。能不能再说一下是在哪里用的?
简介见:http://bbs.phpchina.com/thread-77403-1-1.html

作者: 七月十五   发布时间: 2008-09-20

沙发!

作者: 额头客人   发布时间: 2008-10-07

看过十五

作者: 可不可以   发布时间: 2009-07-06

    全国票/据代开    13641423212   陈经理
代开发-票,全国各地各行各业都可以代开,
全国各地均设置分公司,价格便宜,验证后付宽,
发票网上可以查询。

服务范围:
一:增值税专用发-票、海关专用缴款书.
二:普通国税
1:商品销售统一发-票
2:货物销售统一发-票
3:工业(企业)销售统一发-票
三:普通地税
1:运输(电脑版运输,货运代理,装卸,联运,海运)
2:其它服务(广告费,住宿费,会议费,咨询费,定额餐饮等)
3:建筑安装
4:加工修理
5:其它(租赁,机动车销售,房地产交易,废旧物资回收,税务代开)等专用发-*票。
联系电话: 13641423212陈经理

价格绝对便宜,绝对可靠





作者: 威荇   发布时间: 2009-09-23

和女朋友认识一年吧,感情一直不错,前段时间出差,在一个陌生的城市,每天都给女朋友打电话和发短信,刚开始她也是很想我,每天都给我发短信,可是后来短信慢慢少了,有时候打电话也没人接。我一直比较信任她,所以也就没有在意。

   工作完成以后,我在街上逛了一天,给她买生日礼物。最后还是选定了戒指,因为我们认识到现在,需要一个比较有纪念价值的礼物了。精心挑选了一个我认为很漂亮的戒指,手中拿着戒指的时候,想象着她突然见到我的惊喜,亲手给她带上戒指的感动。。。。。。  

   我走的时候给她说了大约什么时候回来,后来因为事情处理的比较顺利,工作提前几天完成了,想给她一个惊喜,就没有告诉她,在这中间有一个小插曲,生日那天因为我在外地,没有办法陪她,前一天我发短信祝她生日快乐,但是在她生日那天晚上12点忘了发短信了,她很生气,我也很内疚,所以准备回去给她好好补上这个生日。

   我乘上了回家的列车。。。。。

   下了火车,已经晚上9点了。我就直接到了她住的地方。前一段时间她母亲来看她,和她住在一起,刚好昨天走了。

   期待着一场激情的相逢。。。。。

   站在她的门口,我先给她打了电话,问她在干什么?她说一个人在家看电视,呵呵,我说,想不想见我?她说:想,天天都在想我,恨不得马上见到我。我说:呵呵,那我就满足你的愿望,你开门吧!

   她突然就把电话挂了,我觉得奇怪,就又打,但是关机,于是我敲门,但是没有人开门,我突然有一种不祥的预感。敲了半天还是没有声音,我怀疑她是不是在家,于是下楼到门卫那里问,门卫说她回来了,我问:她一个人吗?门卫用很奇怪的眼神看着我,说好象是一男一女。。。。。。

   大脑一片空白,手都在发抖,于是冲上楼疯狂的砸门。。。。。

   十分钟后,当我在门口大喊要报警的时候,门终于开了。。。。

   看到了她,我第一眼看见她就知道发生什么事了,她的头发是乱的,只穿了一件薄毛衣,没有穿内衣,因为可以清楚的看到她的乳*  我当时就想杀人!!!!!!

   我问她:那个男的在哪?她不说话!

   我吼到:你让他出来,男人敢做就敢当,她还是不说话!

   我说:他自己出来,我可以和平的解决这件事,他要是让我找出来,他今天别想活着出去!

   她哭着说:你别这样。。。。。

   这时候,里面的门突然开了,一个男的走出来了,大约177左右,比我矮一点,壮实一些,长相不敢恭维。。。。

   他站在那,问我想怎么样?

   我突然想笑:他竟然来质问我?这是我的女朋友我的家,他问我想怎么样?

   我没有理他。

   虽然我不是很优秀,如果你要选择真正的幸福,我并不阻止你,每个人都有选择的权利!但是我希望你能找一个比我更优秀的男人!

   但是我觉得他根本不在我的视线里,他只是个弱势的男人!他配不上你!在一个比自己强的对手面前失败是值得的,在他面前你就是在侮辱我!

   以下是我给女朋友说的话:X,你知道吗?为了能提前几天见到你,我在外地每天加班到凌晨,想给你一个惊喜,我知道,作为你的男朋友,我确实比较粗心,不能天天陪你逛街,陪你吃饭,甚至连在你生日的时候都无法陪在你身边,但是不管在哪里,我每天都在想着你,思念着你,我不在的时候,我都是托我的朋友来看看你,你的每一件事我都是尽力去办,今天回来,一是想给你一个惊喜,二是我们在一起一年了,我希望我们能有个机会确定我们的感情,这枚戒指我是想亲手给你带上的,但是我没想到发生这样的事,你深深伤害了我,你要知道这样的事,对一个男人的打击!  

   女朋友拉着我,求我给她一次机会!

   女朋友一直在哭,那个男的低着头,我说完这些话,准备走了,因为我答应她,如果那个男的自己出来我不会动手,我都有点惊异我的忍耐力。

   我笑了笑,如果那个男的真的比我强,我还真会给你一次机会,我对自己是很有自信的,挑战我从来不惧的!但是和这个猪头,我没兴趣(那个男的刚出来的时候我问了他一些基本情况,他还是老实回答了。)

   就在我准备走的时候,事情突然发生了变化,对门的一个女的突然冲出来,问我想怎么样?这么晚吵到她了。她出来的时候还贴着面模,吓我一跳,估计我在砸门的时候她应该看见我了,就在火要熄灭的时候,突然有人又来煽风!

   我回头看了一眼那个男的,他好象在一边看热闹,虽然没有笑,但是我看出了他的得意!想象1个小时前,他在我的床上上我的女朋友!估计我在砸门的时候他们刚作完,所以连内衣都没穿!

   我彻底崩溃了,我一边笑着给对门的那个女的说对不起,一边退回房间,我看见一个折凳,那个男的以为我真的准备走了,还准备穿外衣。。。。。

   这时候我直接操起折登,朝那个猪头的脸上砸去。他的脸当时就开花了。虽然他比我壮点,但是一个人要是发狂了,照打。。。。。。

   那个对门的女的吓坏了,叫了一声,跑回了自己的屋

   凳子,杯子,台灯,换了好几样东西,终于撩倒了那个家伙。于是对着脸就是一顿砸,血也喷了一墙!

   直到有点累了,那个男的也没力气还手了,我只问了他一句,干别人女朋友感觉爽不爽?

   女朋友一直在旁边,她也吓坏了,连哭都忘了。

   我扔下那个家伙,站起来,拿着衣服出了门。

   女朋友见我出来了,发疯似的跑出来抱着我,求我不要走,求我原谅她这一次。

   那几天天气很冷,她只穿了一件薄毛衣,拼命拉着我,哭。。。。。她求我打她,只要我心里舒服,就打她。

   我说:我认识你第一天,我就告诉你,我从来不打女人!

   我看着她在寒风中发抖,心里突然感觉很爽!

   但是我一低头又看见她明显的乳*,我心里就联想到她和那个猪头在床上,我突然拉着她就进出租车,我要去开房!我要发泄!

   车走到半路,突然发现没有带身份证,于是让司机掉头,回家。进了家里,那个猪头已经走了,房子一片狼犄。
   不管那么多了,直接扒光了她的衣服,她因为在外面冻的有点久了,有点麻木,只是默默的顺从,我直接就上了!

   她喊疼,但是已经没有感情的了!你疼?你知道我心里的疼吗?你知道我心如刀割吗?

   我根本没有理她,在继续!她看我和她作爱了,以为我可能会原谅她,所以拼命的迎合我。

   我问她:在我砸门的时候是不是你们刚作完?她点点头,我又问:你们总共做过几次?她说:这个重要吗?我说:重要!

   她刚开始不说。在我的追问下,她说:就我回来前,就那一次,还被我碰到了。

   我问她:你爱他什么?她说:他哪都比不上你,他追了我一年,我都没有答应。只是他一直默默的对我好!还在论坛发了1000个帖子说他很爱我,我有点感动,所以。。。。我以为只有一次,以后就不会再发生了!

   我当时就笑了:感动就能上床?发帖子就能让你感动?一次以后就没什么了?今天我要是没回来。是不是你就可以当作什么都没有发生?那我是什么?

   于是什么都不再说!就剩发泄了!  

   这件事该怎么办?我一直在想。。。。。分手吧,这样我就解脱了,和好,不可能,一辈子在那种阴影下生活,我受不了。但是我还是很在乎她的,我该怎么办?

   早晨醒来,感觉好象做了一个恶梦,但是看到墙上的血,我知道这是真的,我的手也被划破了,枕头上也是血,起来冲了澡直接去上班心理还在想那个傻X群发的事儿。

   混沌的状态一直持续了几天,很晚回家,直接作爱,然后睡觉,直到那天上班,她突然打电话来说,她下面出血,我问严重不,她说一直流,我有点担心,本来不想理,但是实在不忍心,一个女孩在外地工作,什么也没有什么亲人,突然心就软了,于是给头请了个假,直接打车去接她到医院,到了医院,一顿检查,医生说子宫有血肿,最近****太频繁,医生还白了我一眼,说,也不知道心疼自己的女朋友,我只有苦笑,以后注意。带她开了药,送她回家了!

   于是分手的事就先搁置了,我想不管怎么样,她现在正在生病,我也有责任,先等她的身体养好吧,这样也对得起她父母对我的嘱托。我见过她的父母,她父母都挺喜欢我的,经常夸我对她的女儿照顾细心周到,我清楚的记得,她父亲拉着我的手说:他和她母亲觉得我不错,希望我继续努力,当时我感觉好幸福。。。。。。

   现在想想。。。。。。。。唉。。。。。。

   有一天,她在家喝的烂醉,我回去的时候一直在哭,我问她怎么了,她说她不能没有我,让我原谅她,我说:想让我原谅你?好,在我面前给那个男的说清楚,我再考虑!

   她直接拿起电话,把那个猪头约了出来,当着我的面告诉他:让他滚,她根本就不喜欢他。。。。。。

   我在旁边只是静静的看着,没有感动,没有快意,当时我就一个想法,她要为自己所做的付出代价!

   等她们说完了,我把那个猪头叫了过来,当时是在街上,他也是很尴尬。他走了过来,告诉我:希望我能好好照顾女朋友,他退出,我看他流泪了,眼睛也肿着(还没有消)也许他也后悔了,但是一切已经晚了我告诉他:我准备和女朋友分手,但是我现在不会告诉她。

   这时女朋友走过来,(她没有听到我们的话),挽着我,回家了!

   写完这些的时候,我突然感觉轻松了!一切都结束了!爱情我现在已经不能相信了,女人?原来以为我很了解,现在我才发现,是个青头!

   日子就这样持续了大约一个星期吧。有一天,我有事去了趟外地,回来的时候也很突然,我直接回家了,但是她不在,于是给她打电话,问她在哪?

   她还以为我在外地,就说:我在家看电视。我觉得挺可笑的,就逗她,一个人呀?她说:恩,好无聊。。。。

   我说我给你留言了,她问:在哪?网上?我说你到时候就知道了!于是我挂了电话,在她的抽屉里找纸留言,当我打开最后一个抽屉,我发现里面的套子,竟然有好几个,还是两个牌子。我在她这从来就没有放过套子!再打开她的电脑,发现她居然在网上开博,里面有大量的她的私房照片,虽然每露点,但都挺暴露的,我想这就是裸聊吧,还装了一个叫什么推广小助手的群发软件,去群发推广她的博客,她博客流量相当可观。要是有满意的竟然带回家来,而且还明码标价收费,这个网址是我后来在她电脑中发现的。博客网址是http://blog.sohu.com/llsiurtja 现在已经关了,还有那个论坛群发软件的网址http://www.tgxzs.com

   看到这些的时候,我的心是彻底的凉了,于是我给留言,让她自己注意身体,我最近比较忙,过一段时间再来看她!

   最近一段时间总是在考虑是不是要再从新开始新的一段感情,女人我是从来没有缺过的,现在要找,至少有5到6个合适的,但是我现在想是不是还要做一个好男人!

   以前看到一个帖子,说一个男人一辈子只会认真的爱一次,如果被伤害了,就不会再认真,我也到了放弃责任的边缘。  

   有一件事,当时是在出差,和几个同事在一起,有一个女同事一直对我比较好,她刚进公司的时候就有很多的同事发起攻击,但都败下镇。还是很惹眼的,她的背景也比较深,其实我也明白她什么意思,那天见完客户,我们都喝醉了,我送她房间,一进到房间,她突然搂住我:说喜欢我。当时其实我也很想,应该说是差点,但是最后我忍住了,当时考虑最多的是我有女朋友,不能这样,我也知道,如果和她在一起,对我的 事业帮助很大的,但是你心里有一个人的时候是很难在容下其她人的,所以我还是拒绝了。

   后来她给我发短信说:虽然我拒绝了,但是她愿意等我,因为她喜欢有责任心的男人!

   现在想想觉得好笑,责任?当我为了责任付出的时候,我的女朋友却为了感动和别人上床!  

   生日又到了,给我祝福的人很多,收到了很多礼物,在单位是没有人知道我的生日的,只有以前的朋友和朦胧感情的异性。

   呵呵,看来我还是有一点魅力的,至少还不老,等着我的事还有很多,事业的更进一步,在众多的礼物中,找到一份情谊最深的,开始自己的新的一段感情!

   堕落吧,白天做一个谦谦君子,晚上做一个禽兽。

   好多次我都这么想,但是我害怕伤害别人,我害怕女孩流眼泪!

   因为我不想做流氓!我不想做禽兽。

   至于那个伤害过我那个的女孩,我希望她还是能幸福的的生活,这是真心话,如果她能再找到一个很爱她的男朋友,我希望她能珍惜这段感情。责任,不仅是给男人的!

作者: 笙露讷   发布时间: 2009-10-12