【问题标题】:PHP Structure - Multiple IF GET statements on one page, or multiple pages?PHP结构-一页或多页上的多个IF GET语句?
【发布时间】:2018-01-21 11:19:10
【问题描述】:

我已经使用 PHP 开发了几年,但我经常质疑的一件事是我是否应该像这样构建我的页面:

            if(getValue('action') == "jobsFilter" && getValue('jobType') == "open")
            {
                $job->FetchJobs($jobStatus = 1);
                foreach($job->result AS $pulledJob)
                {
                ?>
                <div class = "openJob panelJob col-xs-12">
                    <h2><?php echo $pulledJob['jobTitle'] ?></h2>
                    <a href = "?action=viewJob&jobId=<?php echo $pulledJob['Id'] ?>" class = "viewJobBtn ">View Job</a>
                </div>
                <?php
                }       
            }else if(getValue('action') == "jobsFilter" && getValue('jobType') == "active")
            {
                $job->fetchAllJobsAppliedToUser($jobStatus = 1);
                foreach($job->result AS $pulledJob)
                {
                ?>
                <div class = "openJob panelJob col-xs-12">
                    <h2><?php echo $pulledJob['jobTitle'] ?></h2>
                    <a href = "?action=viewJob&jobId=<?php echo $pulledJob['Id'] ?>&jobStatus=1" class = "viewJobBtn ">View Details</a>
                </div>
                <?php
                } 
            }else if(getValue('action') == "viewJob" && isset($_GET['jobId']))
            {
                $job->FetchJobs($jobStatus = 1, $jobId = $_GET['jobId']);
                foreach($job->result AS $pulledJob)
                {
                ?>
                <div class = "viewJob panelJob col-xs-12">

                    <div class = "pulledJobInfo">
                        <h2><?php echo $pulledJob['jobTitle'] ?></h2>
                        <p><?php echo $pulledJob['JobDescription'] ?></p>
                    </div>

                    <form method = "post" action = "?action=acceptJob">
                        <input type = "submit" name = "acceptJobSubmitBtn" class = "acceptJobBtn fullWidthButton ctaButton" value = "Let me help" />
                        <input type = "hidden" name = "jobId" value = "<?php echo $pulledJob['Id'] ?>" />
                    </form>
                </div>
                <?php
                }                    
            }

或者我是否应该有一个单独的页面,称为 open-jobs.php 用于打开的工作,closed-jobs.php 用于关闭的工作等。

如果有人能阐明最佳解决方案,那就太好了!

【问题讨论】:

  • 这主要是一个基于意见的问题。但是,您现在可以开始查看 mvc 框架以获得更好的程序结构
  • 您在 API 中使用单个页面来表示“动作”动词。然而,与其使用多个“if”条件(或者最好是“switch”语句),不如实现一个控制器,加载一个专门用于处理动作的对象。该对象为每种类型的操作提供方法。
  • 感谢您的建议。我从来没有正确地研究过 MVC。目前,我只是为我的创业公司打造一个 MVP,所以坚持我所知道的。然而,在未来,我计划研究更多 MVC 驱动的语言,例如 Ruby On Rails。
  • @Arkascha 您能否详细说明我将如何实现类似的东西?我想我理解逻辑,但我不太确定控制器加载对象是什么意思。我已经离开 OOP 几个月了,即使我深陷其中,我的职业生涯也将我推向了 SQL 开发,哈哈
  • 您会发现许多此类控制器的示例。他们在典型的 php 应用程序中基本上做的是:基于 php 的自动加载功能(基于字符串工作)加载一些类定义。然后实例化该类的一个对象(这里可能是类“Job”),在该对象内部调用一个方法(可能称为“过滤器”或“视图”)。

标签: php html oop


【解决方案1】:

选项 A:

       if(getValue('action') == "jobsFilter" && getValue('jobType') == "open")
       {
           $job->FetchJobs($jobStatus = 1);
           $file="view1"
       }else if(getValue('action') == "jobsFilter" && getValue('jobType') == "active")
       {
           $job->fetchAllJobsAppliedToUser($jobStatus = 1);
           $file="view2"

       }else if(getValue('action') == "viewJob" && isset($_GET['jobId']))
       {
           $job->FetchJobs($jobStatus = 1, $jobId = $_GET['jobId']);
           $file="view3"                                
       }

       if($job != null){
         foreach($job->result AS $pulledJob)
         {
          include($file)
         }   
       } 

选项 B:

       // Logic what to display
       switch(getValue('action')){
       
        case "jobsFilter":

          switch (getValue('jobType')){
            case "open":
              $job->FetchJobs($jobStatus = 1);
              $file="view1"
              break;
            case "active":
              $job->fetchAllJobsAppliedToUser($jobStatus = 1);
              $file="view2" 
              break;             
          }

        case "viewJob":
          $job->FetchJobs($jobStatus = 1, $jobId = $_GET['jobId']);
          $file="view3"  
          break;
       }

       // Execute the display
       if($job != null){
         foreach($job->result AS $pulledJob)
         {
          include($file)
         }   
       } 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-02
    • 1970-01-01
    • 1970-01-01
    • 2012-03-27
    相关资源
    最近更新 更多