zoukankan      html  css  js  c++  java
  • yii create url (一)

    1.$this->redirect这里的$this是当前的controller。可能是应用程序的也
    可能是模块下的
    这里仅将解一下第一个参能是url,当url是一个字符串时,它会自己动跳转
    如$this->redirect('/'); 会跳转到站点根,如果你的当前主机为localhost,
    那么他就会跳到http://localhost/
    再者$this->redirect('/books');,则会跳到http://localhost/books
    在应用程序的controller中,也可以使用$this->redirect('books');
    也会跳到http://localhost/books
    但是当你在module中这样使用,则会出现另一种情况,
    当你打开urlManager,并设置了隐藏脚本文件,输入
    如果你当前的访问地址为
    
    http://localhost/admin/default/index
    
    当使用$this->redirect('books'); 跳转, 跳转后地址则是
    
    http://localhost/admin/default/books
    
    这里只是说一下,redirect的简单跳转,我个人建议,如果不是跳到其他项目,
    或外站$this->redirect('http://yiibook.com');,建议都使用下面的方法

     

    url使用数组
    当url为数组时,会调用urlManager来根据路由组织跳转的路径,这种情况比较理想,而且会根据路由
    的修改而改变
    如果有一条路由为
    'book'=>'admin/default/index'
    格式为:'路由'=>'真实地址',
    即指定了访问book,就相当于方问admin模型下的default控制器的index操作方法。
    既然使用了路由,主要是为了让url更友好,并隐藏真实地址
    
    那么,当想使用$this->redirect跳转到这个路由时,需要指定真实地址,如
    $this->redirect(array('admin/default/index'));
    这样就会跳到这个地址了,而且url显示的确是book,而当你修路由名称时,如
    'books'=>'admin/default/index',或干脆去掉这个路径,都不用修改你的程序
    
    在模块中的情况,如果你当前在admin模块的controller中,使用跳转,则可以不用写moduleId
    直接使用$this->redirect(array('default/index')); 也是ok的,这样你的module也不会
    依赖于moduleId了
    再有如果你当前也在admin模块下的default控制器中,也可以使用
    $this->redirect(array('index'));进行跳转,不依赖于控制器的名字
    
    我们再看一下带参数的路由
    'book<id:d+>'=>'admin/default/index'
    那么,url需要为这个路径传递一个参数id,如
    $this->redirect(array('admin/default/index', 'id'=>1));
    
    url格式为array('真实路径', '参数名'=>'参数值’,'参数名2'=>'参数值2', ....);
    Yii中许多组件或方法都有支持这种url的格式,如CMenu等等。
    
    2.createUrl,有$this->createUrl和Yii::app()->createUrl,
    createUrl它会根据真实地址,组织成路由格式的地址
    根据上面的路由,创建url
    $this->createUrl('admin/default/index')
    带参数情况
    $this->createUrl('admin/default/index', array('id'=>1));
    
    admin模块中,使用
    $this->createUrl('default/index');或$this->create('index');
    不要使用Yii::app()->createUrl,避免依赖于具体的路由
    
    注意一下redirect与createUrl的参数区别。
  • 相关阅读:
    Oracle 按一行里某个字段里的值分割成多行进行展示
    Property or method "openPageOffice" is not defined on the instance but referenced during render. Make sure that this property is reactive, either in the data option, or for class-based components, by
    SpringBoot 项目启动 Failed to convert value of type 'java.lang.String' to required type 'cn.com.goldenwater.dcproj.dao.TacPageOfficePblmListDao';
    Maven 设置阿里镜像
    JS 日期格式化,留作参考
    JS 过滤数组里对象的某个属性
    原生JS实现简单富文本编辑器2
    Chrome控制台使用详解
    android权限(permission)大全
    不借助第三方网站四步实现手机网站转安卓APP
  • 原文地址:https://www.cnblogs.com/likwo/p/5339633.html
Copyright © 2011-2022 走看看