[tp版本3.2.3]
Controller에 공개 클래스 CommonController.class.php
를 작성했고, 로그인 여부를 결정하고 로그인하지 않은 경우 로그인 페이지로 리디렉션하는 생성자를 작성했습니다.
<code><?php namespace Admin\Controller; use Think\Controller; class CommonController extends Controller { public function __construct() { $isLogin = session('islogin'); if (!$isLogin) { $this->redirect('Login/index'); return; } else { session('islogin', $isLogin); // 如果登录刷新一下?不知道是不是这样去刷新,因为可能出现登录了后过期的情况。 } } }</code>
한 가지 문제는 로그인하지 않은 경우 항상 리디렉션된다는 것입니다. 127.0.0.1 将您重定向的次数过多。
오류가 발생하여
<code>class CommonController extends Controller { public function isLogin() { $isLogin = session('islogin'); if (!$isLogin) { $this->redirect('Login/index'); return; } else { session('islogin', $isLogin); // 如果登录刷新一下?不知道是不是这样去刷新 } } }</code>
그런 다음 ArticleController.class.php
<code><?php namespace Admin\Controller; use Think\Controller; class ArticleController extends CommonController { function __construct() { parent::isLogin(); // 这样写会报错,不知道为什么,报错提示如下 } public function dolist() { $this->show("hallo world"); } }</code>
오류 메시지:
<code>Call to a member function display() on null 错误位置 FILE: X:\domainX\ThinkPHP\Library\Think\Controller.class.php LINE: 69</code>
마지막으로 오류를 피하기 위해 다음과 같이 작성합니다.
<code><?php namespace Admin\Controller; use Think\Controller; class ArticleController extends CommonController { public function dolist() { parent::isLogin(); // 这样写 $this->show("hallo world"); } } </code>
질문:
CommonController.class.php를 상속받은 클래스를 __construct에서 판단할 수 없는 이유는 무엇인가요?
CommonController.class.php를 상속받은 클래스가 로그인 여부를 결정해야 할 경우, 각 메소드에 parent::isLogin();
를 적어야 하는 것이 타당할까요? 아니면 그렇게 하는 것이 본질적으로 합리적입니까?
[tp版本3.2.3]
Controller에 공개 클래스 CommonController.class.php
를 작성했고, 로그인 여부를 결정하고 로그인하지 않은 경우 로그인 페이지로 리디렉션하는 생성자를 작성했습니다.
<code><?php namespace Admin\Controller; use Think\Controller; class CommonController extends Controller { public function __construct() { $isLogin = session('islogin'); if (!$isLogin) { $this->redirect('Login/index'); return; } else { session('islogin', $isLogin); // 如果登录刷新一下?不知道是不是这样去刷新,因为可能出现登录了后过期的情况。 } } }</code>
한 가지 문제는 로그인하지 않은 경우 항상 리디렉션된다는 것입니다. 127.0.0.1 将您重定向的次数过多。
오류가 발생하여
<code>class CommonController extends Controller { public function isLogin() { $isLogin = session('islogin'); if (!$isLogin) { $this->redirect('Login/index'); return; } else { session('islogin', $isLogin); // 如果登录刷新一下?不知道是不是这样去刷新 } } }</code>
그런 다음 ArticleController.class.php
<code><?php namespace Admin\Controller; use Think\Controller; class ArticleController extends CommonController { function __construct() { parent::isLogin(); // 这样写会报错,不知道为什么,报错提示如下 } public function dolist() { $this->show("hallo world"); } }</code>
오류 메시지:
<code>Call to a member function display() on null 错误位置 FILE: X:\domainX\ThinkPHP\Library\Think\Controller.class.php LINE: 69</code>
마지막으로 오류를 피하기 위해 다음과 같이 작성합니다.
<code><?php namespace Admin\Controller; use Think\Controller; class ArticleController extends CommonController { public function dolist() { parent::isLogin(); // 这样写 $this->show("hallo world"); } } </code>
질문:
CommonController.class.php를 상속받은 클래스를 __construct에서 판단할 수 없는 이유는 무엇인가요?
CommonController.class.php를 상속받은 클래스가 로그인 여부를 결정해야 할 경우, 각 메소드에 parent::isLogin();
를 적어야 하는 것이 타당할까요? 아니면 그렇게 하는 것이 본질적으로 합리적입니까?
<code> public function _initialize() { $allow_actions = explode(',',C('ALLOW_ACTIONS')); //配置哪些操作无需登录即可访问,比如登录,验证登录 $curr_action = MODULE_NAME . '.' . CONTROLLER_NAME . '.' . ACTION_NAME; if(!in_array($curr_action,$allow_actions) && !is_login_admin()) { //未登录且是需要登录后访问的 $this->redirect('Admin/Public/login'); } } </code>
공개 클래스에서는 리디렉션하지 마세요. 공개 클래스는 로그인 여부만 확인하고 true 또는 false를 반환한 다음 반환된 결과에 따라 작동합니다.
프로그램 입구에서 적어주세요
다른 로그인 Guestcontroller를 작성하세요. commonController에서 계속 상속하지 말고 Controller를 직접 상속하세요. 이런 식으로 로그인하거나 로그아웃하기 전에 게스트의 Guestcontroller가 이를 처리합니다. 로그인 후 모든 것은 commonController의 하위 클래스에 의해 처리됩니다.
아이디어
CommonContrller의 __construct에서 로그인 확인을 수행하세요. parent::__construct
그런 다음 Think 아래의 컨트롤러를 상속하는 로그인 컨트롤러를 제외하고 각 컨트롤러는 이 공통을 상속합니다.
그렇습니다. 한번 시도해 보세요
로그인 컨트롤러는 상속을 받지 않고, 퍼블릭 컨트롤러는 로그인만 작성하는 것이 좋지 않나요?