荆轲刺秦王
今天修改TP5的路由的时候 发现路由规则是对的,但在控制器的函数里就是接收不到前台传过来的值
找了半天没找到原因 在文档的评论区里看大佬写的博客 解决了问题 所以特意写这篇文章 记录一下
1 开启路由配置
// 是否开启路由 'url_route_on' => true, // 路由使用完整匹配 'route_complete_match' => true, // 是否强制使用路由 'url_route_must' => true,
2.定义路由 并测试获取路由参数和?后的参数
看一下文档中的路由参数 提供了很多方法开快捷定义路由的,
我们这里使用
Route::get() 和Route::post()两种方式来配置路由
在路由文件中声明使用路由
use think\Route;
定义第一个路由 比如:
Route::get('hello','index/test/hello'); 注:这里用rule是GET和POST两种方法都可以
第一个参数是我们实际需要在链接中要访问的地址 ,第二个参数是实际应用要走的module/controller/action
我们可以在:
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
注:这篇文章是转载的 其中加了一些 我遇到的问题!