微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Action参数绑定

认的参数绑定方式是按照变量名进行绑定,例如,我们给Blog控制器定义了两个操作方法read和archive方法,由于read操作需要指定一个id参数,archive方法需要指定年份(year)和月份(month)两个参数,那么我们可以如下定义:

<?PHP

namespace HomeController;

use ThinkController;

class BlogController extends Controller{

    public function read($id){

        echo 'id='.$id;

    }

    public function archive($year='2013',$month='01'){

        echo 'year='.$year.'&month='.$month;

    }

}

URL的访问地址分别是:

http://serverName/index.PHP/Home/Blog/read/id/5

http://serverName/index.PHP/Home/Blog/archive/year/2013/month/11

两个URL地址中的id参数和year和month参数会自动和read操作方法以及archive操作方法的同名参数绑定。

输出的结果依次是:

id=5

year=2013&month=11

按照变量名进行参数绑定的参数必须和URL中传入的变量名称一致,但是参数顺序不需要一致。也就是说

http://serverName/index.PHP/Home/Blog/archive/month/11/year/2013

和上面的访问结果是一致的,URL中的参数顺序和操作方法中的参数顺序都可以随意调整,关键是确保参数名称一致即可。

如果使用下面的URL地址进行访问,参数绑定仍然有效:

http://serverName/index.PHP?s=/Home/Blog/read/id/5

http://serverName/index.PHP?s=/Home/Blog/archive/year/2013/month/11

http://serverName/index.PHP?c=Blog&a=read&id=5

http://serverName/index.PHP?c=Blog&a=archive&year=2013&month=11

如果用户访问的URL地址是:

http://serverName/index.PHP/Home/Blog/read/

那么会抛出下面的异常提示: 参数错误:id

报错的原因很简单,因为在执行read操作方法的时候,id参数是必须传入参数的,但是方法无法从URL地址获取正确的id参数信息。由于我们不能相信用户的任何输入,因此建议你给read方法的id参数添加认值,例如:

    public function read($id=0){

        echo 'id='.$id;

    }

这样,当我们访问 http://serverName/index.PHP/Home/Blog/read/的时候就会输出

id=0

当我们访问 http://serverName/index.PHP/Home/Blog/archive/的时候,输出

year=2013&month=01

始终给操作方法的参数定义认值是一个避免报错的好办法

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐