TP5 路由传值问题

荆轲刺秦王php

今天修改TP5的路由的时候  发现路由规则是对的,但在控制器的函数里就是接收不到前台传过来的值html

找了半天没找到缘由  在文档的评论区里看大佬写的博客  解决了问题  因此特地写这篇文章  记录一下thinkphp

1 开启路由配置

// 是否开启路由
'url_route_on'           => true,
// 路由使用完整匹配
'route_complete_match'   => true,

// 是否强制使用路由
'url_route_must'         => true,

 

 2.定义路由 并测试获取路由参数和?后的参数浏览器

 

看一下文档中的路由参数 提供了不少方法开快捷定义路由的,函数

咱们这里使用thinkphp5

Route::get() 和Route::post()两种方式来配置路由post

在路由文件中声明使用路由测试

use think\Route;

定义第一个路由 好比:url

Route::get('hello','index/test/hello');        注:这里用rule是GET和POST两种方法均可以

第一个参数是咱们实际须要在连接中要访问的地址 ,第二个参数是实际应用要走的module/controller/actionhtm

咱们能够在:

index/test/hello

对应的hello 方法中 echo ''你好';

访问  域名/hello

能够看到在浏览器上输出

你好

 

到目前为止  一切都很正常   !!!  注意  下面要出现问题了!!!!!

 

接下来咱们修改一下路由:

Route::get('hello/:id','index/test/hello');

在hello 方法中:

dump(input('get.id'));
dump(input());
dump(request()->get());
dump(request()->get('id'));
dump(request()->param());
dump(request()->param('id'));
dump(request()->route());
dump(request()->route('id'));

返回结果是依次是:

null

array (size=1)
  'id' => string '10' (length=2)
  
array (size=0)
  empty
  
null 
  
array (size=1)
  'id' => string '10' (length=2)
  
string '10' (length=2)

array (size=1)
  'id' => string '10' (length=2)
  
string '10' (length=2)

其中:

dump(input('get.id'));
dump(request()->get());
dump(request()->get('id'));

这三种获取参数的方式 ,在定义了路由,而且路由中定义了:id 这种变量时 是获取不到参数的!!

 

还有一种方式 ,就是我遇到的这种状况 ,也是获取不到参数的!!

public function show(request  $request)
{
    $id = $request->get('id');
}

!!!!注意!!!!  这种写法是接收不到参数的!!!!

 

另外下面这种方式能够获取到参数:

public function hello($id)

这里输出$id也能够获取到值。可是这里的 $id 必需要和 路由中的 :id 对应 变量必须相同

 

另外若是 在连接后面跟上参数

好比  域名/hello/10?name=123

使用上面的获取参数的方法 来获取name值 是均可以获取到值的,因此这里咱们就须要须要合适的获取参数方法了

咱们测试一下:

dump(input());
dump(request()->get());
dump(request()->route());
dump(request()->param());
array (size=2)
  'name' => string '123' (length=3)
  'id' => string '10' (length=2)

array (size=1)
  'name' => string '123' (length=3)

array (size=1)
  'id' => string '10' (length=2)

array (size=2)
  'name' => string '123' (length=3)
  'id' => string '10' (length=2)

若是咱们只想要本身定义的路由变量 就须要使用:

request()->route()

获取参数

 

还有咱们看到其中的:

request()->get()

来得到参数

 

还有强调一下 咱们最好不要用能获取?后面参数的方法来获取参数。若是实在是须要获取。咱们最好可以准备的指定咱们须要获取的参数变量

 

3 网页上使用路由连接

 

咱们可以定义路由,并实际的访问了 咱们看一下 在网页上怎么运用

你可能会说,既然咱们定义了路由。那么直接上连接上拼接上连接不就能够了

我想说 这样是万万很差的

 

好比说个人上面的连接 /hello/:id  在连接上直接输入

这样的。当前这能够访问。可是这样的连接在运营的过程当中使用的愈来愈多 若是哪天看着这个连接不顺眼了。或者说,老板找你,把这个连接改一下。难道你要一个一个的去找去改吗,这样的很麻烦。

 

既然说到这里了。必然会有解决办法的。

咱们能够看官方文档。  https://www.kancloud.cn/manual/thinkphp5/118041    具体到章节  直接点开就能够

咱们在网页连接上直接按照原来没有定义路由时的思路来 写连接

 

tp5 生成连接的方式是使用url

{:url('index/test/hello?id='.$v['id'])}//这个是循环数据时拼接变量

//这里直接使用a标签会被解析 因此用汉字代替了
a标签  href="{:url('index/article/details?id=1')}">
    我是一个连接
/a标签


打开网页 咱们把鼠标放到标题上 能够看到浏览器下方的状态栏上 实际的连接就是咱们须要的。域名/hello/1.html

这里在网页上直接生成的连接会带有后缀html 没有这个html也是能够访问的。
如今个人连接是否是咱们想要的理想效果了

咱们这里改一下路由

Route::get('news/:id','index/test/hello');

刷新页面 是否是连接已经更新了 域名/news/1.html

 

转载地址:http://www.upwqy.com/details/12.html               

注:这篇文章是转载的  其中加了一些 我遇到的问题!