0

我必须使用 Codeigniter 在我的应用程序中做出一些设计决定。

我在控制器中有一个方法,它调用一个库来创建 PDF。另外我有一些类将数字作为参数并返回字符串(口头数字)。

我想知道在所有此类之间传递数据的最佳做法是什么。这是控制器调用所有库(在步骤 2 和步骤 3 之间)并将所有准备好的数据提供给将创建 PDF 的模型的任务吗?或者这是模型本身的任务,通过加载和调用将数字转换为字符串的类来转换提供的原始数据。

就松散耦合以及代码的模块化和清晰度而言,最好的解决方案是什么。

这是一个控制器:

class Payu extends CI_Controller
{
     public function raport($task_id)
     {
           /* (step 1) Load necessarty models */
           $this->load->model('MTasks');
           $this->load->model('mpdfinvoice');

           /* (step 2) task details from DB */
           $task_details = $this->MTasks->getTaskDetails($task_id);

           /* (step 3) create PDF that will be send */
           $this->mpdfinvoice->pdf($task_details);

           /* (step 4) compose an email with attached pdf */
           $this->email->from($this->config->item('noreply_email'));
           $this->email->to($task_details['email']);
           $this->email->attach('invoiceJustCreated.pdf');
           $this->email->subject('opłaciłes to zlecenie');
           $message = 'some message goes here';
           $this->email->message($message);
           $this->email->send();


     }
}


 This is a model that creates PDF file (called by controller)

 class mpdfinvoice extends CI_Model
 {
     public function pdf($task_details)
     {
          /* (step 1) load necesary library and helper */
          $this->load->library(array('fpdf' ));
          $this->load->helper('file');

          /* (step 2) set PDF page configuration*/              
          $this->fpdf->AddPage();
          $this->fpdf->AddFont('arialpl','','arialpl.php');
          $this->fpdf->SetFont('arialpl','',16);

          /* (step 3) show data on PDF page */              
          $this->fpdf->cell('','',$task_details['payment_amount'] ,1);

          /*  I want to have "payment amount" verbally here 
              So Should I load and call the convert class here or
              should I have this data already prepared by the controller
              and only output it ? */

     }
 }
4

2 回答 2

0

我建议创建 PDF 或任何其他文件以及所有值之间的转换发生在模型上,然后控制器决定从模型中获取哪些数据,以便将其传递给适当的视图,它会知道如何显示它。

控制器不应用于直接显示(输出)数据或访问数据库和创建文件。

此外,任何情况下都不应使用模型来输出数据。

于 2013-04-04T08:09:00.773 回答
0

尝试将 codeigniter 中的控制器视为您的数据粘合剂。控制器从客户端检索数据,对其进行标准化并触发适当的操作(重定向、触发库、视图、模型和帮助程序,同时使用提供的数据。)

在您的情况下,只需使用控制器从您的模型或用户输入中检索数据。然后将其传递给创建 pdf 的库。如果 pdf 创建成功,则返回 true 让控制器知道它是成功的。创建 flashdata 成功消息并重定向到输出视图的页面:

  1. 用户要求:pdf/下载
  2. 控制器pdf触发下载方法
  3. 下载触发模型并将数据推送到视图
  4. 带有数据的视图将返回到一个变量中
  5. $view 变量将被推送到 Pdf 库
  6. 触发pdf创建
  7. pdf 触发 pdf 下载(可选)
  8. 控制器触发器重定向到 pdf/overview
于 2013-04-04T08:28:11.617 回答