在日常的web开发中,跳转是一个很常见的操作,成功了要跳转,错误了要跳转,满足某某条件也要跳转,symfony作为一款成熟的开发框架对跳转的处理也是非常多样的。 一. 关于跳转 虽说多样,但万变不离其宗,一般的跳转分为两种,forward(转发)和redirect(重定向),两种方法虽然目的都是为了进行跳转但是本质上还是有很大差别的。 所谓forward,是一个action将当前的请求交给另外一个action处理,这个过程是在同一个http请求中完成的,整个过程不涉及客户端,url地址也不会发生改变。 示例1 public function executeActionA($request) { // 一些处理 // to ActionB: 剩下的就交给你了 $this->forward(‘default’, ‘actionb’); } public function executeActionB($request) { // to ActionA: 交给我你就放心吧 // 又一些处理 } 示例一中,ActionA将处理工作交给的ActionB,其实其效果是和下例一样的。 示例2 public function executeActionC($request) { // 一些处理 // 又一些处理 // ps : 我是全能,ActionA和ActionB能做的我自己就能做 } 上面这两个例子就如同我们雇佣一个程序员一个美工或者雇佣一个懂美工的程序员一样,我们将事件处理过程分开总是有各种各样的原因,比如为了逻辑清晰,代码重用等等等等,所以在很多情况下我们就需要使用forward。 说完forward我们再来说redirect,其实我觉得redirect才能够叫做真正的跳转,很多时候我觉得forward就象调用函数。一个真正的redirect涉及了两次http请求,浏览器发送了一个http请求之后,服务端根据业务需要进行跳转,这样服务端会向浏览器返回一个跳转信息,这个跳转信息可能是一个重定向的http header,也可能是一段带有跳转代码的html或者javascript,浏览器接到请求根据跳转信息进行第二次http 请求,这个第二次请求不同于forward的第二个Action,这个请求可以在程序内,也可以在程序外,比如说跳到google, 而用forward就象蹲监狱,再怎么跳也就是换换牢房,想出去是不可能了,除非你是Michael Scofield。 示例3 public function executeActionA($request) [...]
-------------- 配置PHP环境 -------------- 首先当然要先配置好你的PHP环境。图省事儿的话,当然可以使用XAMPP这样的集成环境,不过为了学习和环境完整,还是推荐自己安装。具体安装方法又得一篇文章,我这儿就不写了。 我下载的版本较新,均从官方下载,分别是apache_2.2.4-win32- x86-no_ssl.msi、mysql-5.0.41-win32.zip、php-5.2.4-Win32.zip,经测试可以直接安装PEAR和 Symfony。之所以这么说,是因为前两天同事的Symfony怎么装也装不上,后来发现是由于PHP版本太新,大约是Symfony还未跟上。 要运行Symfony,最简单的当然是http://www.symfony-project.com/get/sf_sandbox.tgz这个沙盒了,下载解压直接用就是了,不需要安装。要想安装的话,推荐PEAR方式,简单方便。 以PEAR方式安装,自然要先安装PEAR。在安装PHP时,PEAR默认是没有安装的,这一点需要注意。 -------------- 安装pear -------------- pear是PHP的扩展和应用程序库,包含了很多有用的类,安装好php5.0后,pear实际上并没有被安装,安装的方法如下: 1.在php目录中双击go-pear.bat。 2.按照提示输入一些设置信息,主要是要把局域网的网关加上,如[url]http://192.168.0.1:80/[/url] ,pear要用这个地址访问Internet,若无代理服务器则直接回车 3.然后会提示一些包和PHP绑定,选择Y 。 4.然后安装基本包和提示安装成功,就这么简单。 5.打开windows目录下的php.ini文件,然后查找到如下的地方: [code]; UNIX: "/path1:/path2" ;include_path = ".:/php/includes" ; ; Windows: "\path1;\path2" ;include_path = ".;c:\php\includes"[/code] 把最后一行的注释去掉,然后把后面路径改成你的PEAR路径,例如: [code]include_path = ".;c:\php\pear\"[/code] 保存PHP.INI,然后重新启动APACHE即可。 -------------- 安装Symfony -------------- 安装第一步 是把Symfony频道加入PEAR, 执行以下命令: [code]> pear channel-discover pear.symfony-project.com[/code] 安装稳定版本的Symfony,执行以下命令: [code]> pear install symfony/symfony[/code] 假如你沒有 phing [...]
今天遇到一个问题,执行 symfony propel-build-schema 就报错,symfony版本为1.0.7。 错误信息如下: D:\Deploy_Project\moa>symfony propel-build-schema Buildfile: C:\php5\PEAR\symfony\vendor\propel-generator\build.xml BUILD FAILED Can’t load default task list Total time: 0.0085 seconds [BuildException] Can’t load default task list 找了一个下午,终于找到了,原来是配置的问题。 在 [project]/config/config.php中,当配置为: $sf_symfony_lib_dir = ‘C:/php5/pear/symfony’; $sf_symfony_data_dir = ‘C:/php5/data/symfony’; 在运行 symfony 命令的时候,就会报错。 修改为下面的写法后就正常了。 $sf_symfony_lib_dir = ‘C:\php5\pear/symfony’; $sf_symfony_data_dir = ‘C:\php5\data/symfony’; [...]
1. Checking IS NULL with Propel <?php $criteria = new Criteria(); // This way we create something like ($field IS NULL 0) which is wrong SQL-syntax $criteria->add($field, “” ,Criteria::ISNULL); // This way we create something like ($field IS NULL) avoiding errors $criteria->add($field, NULL ,Criteria::ISNULL); 2.Checking an OR condition with propel <?php // This criteria will check: [...]
在symfony中, 对数据库的查询一般使用Criteria对象(symfony1.2中引入了Doctrine), 下面看一个简单的查询. view plaincopy to clipboardprint? $c = new Criteria(); $products = ProductPeer::doSelect($c); $c = new Criteria(); $products = ProductPeer::doSelect($c); 上面的查询取出了product表中的全部数据, 其作用和下面的sql语句是等同的. SELECT * FROM `product`; 可能看上去Criteria的使用显得比较复杂, 但当你进行复杂的查询的时候你就会发现Criteria是多么的强大. view plaincopy to clipboardprint? $c = new Criteria(); $c->add(Product::CATEGORY, ’computer’); $c->add(Product::PRICE, 2000, Criteria::GTEATER_THAN); $c->addAnd(Product::PRICE, 3000, Criteria::LESS_THAN); $c->addAscendingOrderByColumn(Product::PRICE); $product = ProductPeer::doSelect($c); $c = new Criteria(); $c->add(Product::CATEGORY, ‘computer’); $c->add(Product::PRICE, 2000, Criteria::GTEATER_THAN); $c->addAnd(Product::PRICE, 3000, Criteria::LESS_THAN); $c->addAscendingOrderByColumn(Product::PRICE); $product = ProductPeer::doSelect($c); 上面的语句取出了价格在2000至3000之间的分类为computer的产品, 并按照价格升序排列, 上面的语句会生成一个类似下面的语句. SELECT * [...]
近期评论