我 && yii2 (路由优化)
今天配置了一下yii2 的路由,用 /index.php?r=... 这样的路由,实在是不太习惯,所以我便试着把yii2 的路由,写成laravel 那般,以下为详情
1.环境介绍
lnmp php5.6, mysql5.5, lnmp1.2
yii2-advanced
2.在 frontend/config/main.php 中,添加以下内容
'urlManager' => [
'enablePrettyUrl' => true, //开启URL美化
'showScriptName' => false, //禁用index.php文件
'rules' => require_once '../config/routes.php', //载入路由设置文件 routes.php ],
3.书写 routes.php 文件,之所以使用文件这样的格式,是为了避免main.php 文件过于冗余
<?php
return [
'test.json' => 'demo/test', //未指定请求方式是,可以为如何方式,类似laravel 中的 any 'POST api-post' => 'demo/post-test', //POST 表示用post 方式请求, actionPostTest ==> post-test 'get-demo/<id:\d+>' => 'demo/get-id', //<id:\d+> 表示url中传递参数 id=??
];
* api/test/test.json 为访问的url链接,demo/test 对应的是 控制器 DemoController 的 actionTest 方法
* 至于该routes.php 更多的用法,可以参考 laravel 的路由设置,在结合yii2 来进行
4. 编写 DemoController 控制器
<?php
namespace frontend\controllers; use Yii;
use yii\web\Controller; /**
* Site controller
*/
class DemoController extends Controller{ public $layout = false; //不使用布局
public $enableCsrfValidation=false; //any www.yii2.com/test.json
public function actionTest()
{
echo json_encode(['name'=>'zeopean']);
} //post www.yii2.com/api-post
public function actionPostTest()
{
echo json_encode(['name'=>'zeopean', 'method'=>'post']); } //any www.yii2.com/get-demo/12
public function actionGetId()
{
$request = Yii::$app->request;
$id = $request->get('id');
echo json_encode(['id'=>$id]);
}
}
5. 如果你以为这样就可以运行,那就错了,你还需要在我们的nginx 中稍作配置,具体如下
location / {
if (!-e $request_filename){
rewrite ^/(.*) /index.php last;
}
}
url的使用
- \Yii :: $app->urlManager 的使用
echo \Yii::$app->urlManager->createUrl(['site/page', 'id' => 'about']);
// /index.php/site/page/id/about/ echo \Yii::$app->urlManager->createUrl(['date-time/fast-forward', 'id' => 105])
// /index.php?r=date-time/fast-forward&id=105 echo \Yii::$app->urlManager->createAbsoluteUrl('blog/post/index');
// http://www.example.com/index.php/blog/post/index/
- yii\helpers\Url 的使用
use yii\helpers\Url; // 当前活动路由
// /index.php?r=management/default/users
echo Url::to(''); // 相同的控制器,不同的动作
// /index.php?r=management/default/page&id=contact
echo Url::toRoute(['page', 'id' => 'contact']); // 相同模块,不同控制器和动作
// /index.php?r=management/post/index
echo Url::toRoute('post/index'); // 绝对路由,不管是被哪个控制器调用
// /index.php?r=site/index
echo Url::toRoute('/site/index'); // 区分大小写的控制器动作 `actionHiTech` 的 url 格式
// /index.php?r=management/default/hi-tech
echo Url::toRoute('hi-tech'); // 控制器和动作都区分大小写的 url,如'DateTimeController::actionFastForward' :
// /index.php?r=date-time/fast-forward&id=105
echo Url::toRoute(['/date-time/fast-forward', 'id' => 105]); // 从别名中获取 URL
// http://google.com/
Yii::setAlias('@google', 'http://google.com/');
echo Url::to('@google'); // 获取当前页的标准 URL
// /index.php?r=management/default/users
echo Url::canonical(); // 获得 home 主页的 URL
// /index.php?r=site/index
echo Url::home(); Url::remember() ; // 保存URL以供下次使用 Url::previous(); // 取出前面保存的 URL
好了,这样就可以了
我 && yii2 (路由优化)的更多相关文章
- 浅谈ThinkPHP3.2的子域名部署和路由优化(一)
前言:建立一个网站系统,往往包含多个子网站,例如PC官网,移动端官网,后台管理,数据源自一个相同的数据库,整个架构上,从ThinkPHP来看,可以大体理解为Model(M)是一样的,Controlle ...
- thinkPHP5.0 URL路由优化
在tp中访问页面的时候URL地址是 域名/模块/控制器/方法,在点击首页的时候URL是 域名/index/index/index 而不是只显示域名,这样不利于SEO,而且强迫症的我看着很不爽,这个时候 ...
- Yii2 路由美化
一.美化路由形式 如:localhost/index.php?r=site/index 这种路由形式对SEO不友好,那么是否可以对路由进行一下美化呢?在Yii2中我们可以将路由必成以下的形式: 如:l ...
- Yii2性能优化
https://www.yiiframework.com/doc/guide/2.0/zh-cn/tutorial-performance-tuning 性能优化 有许多因素影响你的 Web 应用程序 ...
- Yii2 性能优化 来源yii2官方文档
优化你的 PHP 环境 使用最新稳定版本的 PHP . PHP 的主要版本可能带来显著的性能提升. 启用字节码缓存 Opcache(PHP 5.5或更高版本) 或 APC (PHP 5.4或更早版本) ...
- 互联网IP合全局路由优化的原则-Dijkstra算法证明
周末继续写东西的一半填补了,为了达到完美的一天.我们知道一个事实,IP地址太多.统一管理是不可能的了,无论从控制平面从数据/管理层表示,飞机是如此. 所以.IP协议被设计为可伸缩.供IP路由术语,跳路 ...
- 新闻cms管理系统 (补)-----路由优化一
修改后台的入口文件,将访问后台页面的入口文件设为admin.php,并且访问该文件的模块默认为admin模块. 添加后台入口文件具体操作步骤: (1)项目目录下新建admin.php (2)实现入口文 ...
- 缓存技术之——Yii2性能优化之:缓存依赖
Yii中的缓存依赖,简单来说就是将缓存和另外一个东西绑定在一起,如果另外一个东西发生变化,那么缓存也将发生变化.有点儿类似于JS中的触发事件(但是也不那么像),缓存的变动是依赖的东西所导致的. 依赖可 ...
- Yii2 的安装及简单使用
前段时间第一次使用Yii2框架,碰到了一些问题,这里记录一下. Yii2安装:通过composer安装 1.首先要安装composer,我在另外一篇博客中介绍了如何在Windows下安装compose ...
随机推荐
- 一个input标签搞定含内外描边及阴影的按钮~
自从怀孕以来,我就变得很是轻松,偶尔写一两个页面,或者偶尔调试一个两个bug,或者偶尔给做JS的同事打打下手,修改个bug什么......一个习惯于忙碌的工作的人,这一闲下来,感觉还真TM很不舒服-怎 ...
- windows脚本配置ip地址
背景:工作上经常涉及到要调试设备,每次都要手动配置静态ip地址,配置完之后还要重新改回来,有时候为了连续调试多台设备,来回手动更改ip,实在麻烦. 思考:想到windows有脚本,可以利用脚本文件达到 ...
- Unity已经学会的
1.以MonoBehaviour为脚本的开发模式. 2.MonoBehaviour的大多数API. 3.动画系统大多数了解. 4.UI了解一些,能写UI. 5.Editor了解一些,能写Editor. ...
- 一张图说懂java中 private default protected public 的区别
private:修饰完全隐藏类的成员,这样,就不能从类的外边直接访问他们,我们提供set和get方法,保证类中数据域的安全. default:指默认修饰符,什么都不加,实际上它限制的范围就是一个包内可 ...
- Linux下apache+phppgadmin安装配置
1.安装pg 安装PostgreSQL数据库 修改pg_hba.conf配置文件,使得数据库可以通过外部访问. 具体可以配置为: # TYPE DATABASE USER ADDRESS METHOD ...
- sudo,linux 新建账号,并开通ssh登录
新建账号需要root账号或sudo权限,sudo配置保存在/etc/sudoers文件. sudoers的配置格式一般为: root ALL=(ALL:ALL) ALL %sudo ALL=(ALL: ...
- flume log4j配置
版权声明:本文为博主原创文章,未经博主允许不得转载. 1.依赖jar包导入,通过maven管理,pom文件增加如下配置: <!-- log4j输出日志到flume的appender依赖包 --& ...
- MongoDB服务重启及后台运行解决方法
1 在MongoDB 安装目录下 新建一个test文件夹 mkdir /test 2 切换到MongoDB的安装目录(可通过 find -name 'mongod'命令查找安装目录)下 执行: bin ...
- java提高篇之理解java的三大特性——多态
面向对象编程有三大特性:封装.继承.多态. 封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据.对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访问方法. 继承 ...
- poj1050
To the Max Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 39081 Accepted: 20639 Desc ...