繁体   English   中英

正在使用if else语句有效地根据URL的控制器和操作部分之后的参数加载视图,还是有更好的方法来执行此操作

[英]Is using if else statement to load view based on parameters after controller and action part of url efficient or is there a better way of doing this

我可以有以下网址

www.example.com/accounts/
www.example.com/accounts/signup
www.example.com/accounts/signup/validate
www.example.com/accounts/login

对于每种情况,帐户都是我的控制者,而索引,注册,注册和登录分别成为我的操作(或方法)。 我必须根据自己的行为提出不同的看法。 这是我的代码的示例

指数

$url_segments = explode('/', $url);

$controller = !empty($url_segments[0]) ? $url_segments[0] : 'home';
array_shift($url_segments); // removes the controller name from array
$action = isset($url_segments[0]) && !empty($url_segments[0]) ? $url_segments[0] : 'index';
array_shift($url_segments); // removes the action name from array

$controller = ucfirst($controller);
$controller = new $controller($url_segments);
$controller->$action();

控制器类

class Accounts{
    private $url_segments;

    public function __construct() {
        $this->url_segments = $url_segments;
    }
    public function index() {
        // index code here
    }
    public function login() {
        // login code here
    }
    public function signup() {
        if (!isset($this->url_segments[0])) { 
            // url entered was: example.com/signup
        } else if (isset($this->url_segments[0]) && $this->url_segments[0] == 'validate') {
            // url entered was: example.com/signup/validate
        }
    }
}

从上面的代码中可以看到,随着参数在url的controller和action部分之后不断添加,我需要继续使用条件语句来运行正确的代码,例如/signup/signup/validate 这种使用条件语句基于参数加载视图的方法是有效的还是有更好的方法呢?

我建议您使用Symfony Routing之类的路由系统。 在那里,您可以为每个URL添加一个新的Route,并将它们重定向到您的特定控制器。 路线示例:

$routes = new RouteCollection();

$routes->add('/accounts_signup', route('POST', "/accounts/signup", 'App\Controller\AccountController:signup'));

return $routes;

当通过发布请求调用www.example.com/accounts/signup时,此路由将在AccountController calss中调用signup方法。

我建议您使用这样的东西。 即使开始时这可能有点复杂,但在阅读(并理解)文档后,这将为您节省很多时间,并且也使您的代码更具可读性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM