继承遗留问题

这次的软件工程大实验选择使用了thinkphp进行编写。虽然实验写得比较粗糙,但是在实现过程中还是遇到了几个问题的。

问题描述

整个系统的界面是采用继承的方式实现的,页面的菜单部分都使用同样的代码。菜单上有一个功能是用户信息。效果是点击它,就可以修改当前登录用户的信息。

实现思路

应为在登录的时候,通过使用session将当前登录的用户id存了起来。所以直接获取当前登录的id,然后点击按钮的时候将id传入,编辑这个人信息。

实现过程

控制器中获取登录用户的id,传入V层:

1
2
3
4
5
use think\Session;
...
$teacherId = Session::get('teacherId');
$this->assign('teacherId', $teacherId);
...

v层直接添加跳转,跳转到编辑的界面:

1
2
3
...
<li><a href="{:url('teacher/edit?id='.$teacherId)}"><i class="fa fa-user fa-fw"></i> 用户信息</a>
...

这时候报了这么一个错:

$teacherId没有定义,首先就去检查了一下我有没有拼写出错,发现没有后,检查这个变量是否传过来了,将变量换一个位置,变量存在。这时候陷入了僵局,完全不知道问题所在。又仔细看一一下报错,这时候文件名引起了我的注意,这是一个编译后的文件,将html中的tp代码都进行了转义。

这里突然发现这并不是我以为的文件,报错的位置是另一个文件。看到这里就知道问题的原因了。因为我的菜单使用了继承,所以没有重写的位置,完全使用原来的代码,但是这个时候,这个文件的控制器并没有定义$teacherId这个变量。

原因找到了,解决起来就简单了。

控制器使用了继承,有一个基本控制器,在这个基本控制器中定义一个构造函数,通过构造函数获取当前登录的用户id。相当在所有的控制器中都定义了$teacherId了。

总结

1.通过解决这个问题,又一次发现了快速找到问题原因的重要性。

2.不要想当然的定位错误。

坚持原创技术分享,您的支持将鼓励我继续创作!