2013-03-23 103 views
2

我试图将变量传递给视图,而这个命名和目录结构是正确的,这很奇怪。下面是我的控制器功能:CakePHP设置函数不会将变量从控制器传递到视图

public function validate_apply_link(){ 
     App::uses('CakeEmail', 'Network/Email'); 

     $this->layout = 'blank'; 

     $listings = $this->CareersAndJob->query(" 
      SELECT l.sid, l.title, lp.value, u.CompanyName, u.WebSite 
      FROM listings l 
      LEFT JOIN listings_properties lp 
      ON lp.object_sid = l.sid 
      LEFT JOIN users u 
      ON u.sid = l.user_sid 
      WHERE l.active = 1 
      AND lp.add_parameter = 2 
      AND l.JobGateSenderReference IS NULL 
      AND u.CompanyName != 'AECOM' 
      ORDER BY u.CompanyName ASC 
      LIMIT 5 
      "); 

     $doc = new DOMDocument(); 
     ob_start(); 
     $listing_count = count($listings); 
     echo nl2br("Checking $listing_count active jobs...\n\n"); 
     $i=0; 
     foreach($listings as $listing){ 

      $sid = $listing['l']['sid']; 
      $url = $listing['lp']['value']; 
      $company_name = $listing['u']['CompanyName']; 
      $title = htmlspecialchars($listing['l']['title']); 

      $length = strpos($title, "-"); 
      if($length != 0){ 
       $title = substr($title, 0, $length-1); 
      } 
      $title = substr($title, 0, $length-1); 
      $title = substr($title, 0, 10); 
      $data = $this->curl($url); 

      $check_pdf = strpos($data['info']['content_type'], "pdf"); 
      if($check_pdf != false){ 
       $outputs['data'][$i]['url'] = $url; 
       $outputs['data'][$i]['sid'] = $sid; 
       $outputs['data'][$i]['title'] = $title; 
       $outputs['data'][$i]['company_name'] = $company_name; 
       $outputs['data'][$i]['our_link'] = "http://careersandjobs.com.au/display-job/{$sid}"; 
       $outputs['data'][$i]['content_type'] = $data['info']['content_type']; 

       $outputs['data'][$i]['data_type'] = 'pdf'; 

       $i++; 
       continue; 
      } 

      @$doc->loadHTML($data['results']); 
      $html = $doc->saveHTML(); 
      $xpath = new DOMXpath($doc); 

      $body = $doc->getElementsByTagName('body')->item(0); 

      $parsed_url = parse_url($url); 

      switch($parsed_url['host']){ 
       case "www.michaelpage.com.au": 
        parse_str($url); 
        $exist = $xpath->query("//*[contains(@value,'{$ref}')]"); 

       break; 
       case "https://vacancies.mackay.qld.gov.au": 
        parse_str($url); 
        $exist = $xpath->query("//*[contains(@value,'{$title}')]"); 
       break; 
       default: 
        $exist = $xpath->query("//*[contains(text(),'{$title}')]"); 
       break; 
      } 

      if($exist->length == 0){ 

       if(strpos($url, '#') == false){ 

       $outputs['data'][$i]['url'] = $url; 
       $outputs['data'][$i]['sid'] = $sid; 
       $outputs['data'][$i]['title'] = $title; 
       $outputs['data'][$i]['company_name'] = $company_name; 
       $outputs['data'][$i]['our_link'] = "http://careersandjobs.com.au/display-job/{$sid}"; 
       $outputs['data'][$i]['content_type'] = $data['info']['content_type']; 

       $response_code = $this->http_response_codes($data['info']['http_code']); 
       $outputs['data'][$i]['response_code'] = $response_code; 

       $outputs['data'][$i]['data_type'] = 'title_not_found'; 


       }else{ 

        $outputs['data'][$i]['data_type'] = 'no_iframe'; 
       } 

       $i++; 
      } 

      flush(); 
      ob_flush(); 

     } 

     $this->set(compact('outputs')); 

    } 

我可以在视图中outputs变量做pr但这输出到NULL但是当我删除整个代码串的控制器功能中,只是通过测试变量通过它工作。

这个功能有什么问题,我不知道?在上面的函数被发现的方式

没有错误

app/Controller/CareersAndJobsController.php (line 1048) 
array(
    'data' => array(
     (int) 0 => array(
      'url' => 'http://bawbawshire.currentjobs.com.au/cvbuilder/apply+for+this+job/no/1225055', 
      'sid' => '3649', 
      'title' => 'Graduate P', 
      'company_name' => 'Baw Baw Shire Council', 
      'our_link' => 'http://careersandjobs.com.au/display-job/3649', 
      'content_type' => 'text/html; charset=utf-8', 
      'response_code' => 'OK', 
      'data_type' => 'title_not_found' 
     ), 
     (int) 1 => array(
      'url' => 'http://bawbawshire.currentjobs.com.au/cvbuilder/apply+for+this+job/no/1225724', 
      'sid' => '3726', 
      'title' => 'Program &a', 
      'company_name' => 'Baw Baw Shire Council', 
      'our_link' => 'http://careersandjobs.com.au/display-job/3726', 
      'content_type' => 'text/html; charset=utf-8', 
      'response_code' => 'OK', 
      'data_type' => 'title_not_found' 
     ), 
     (int) 2 => array(
      'url' => 'http://bawbawshire.currentjobs.com.au/cvbuilder/apply+for+this+job/no/1225826', 
      'sid' => '3727', 
      'title' => 'Road Netwo', 
      'company_name' => 'Baw Baw Shire Council', 
      'our_link' => 'http://careersandjobs.com.au/display-job/3727', 
      'content_type' => 'text/html; charset=utf-8', 
      'response_code' => 'OK', 
      'data_type' => 'title_not_found' 
     ) 
    ) 
) 

这是我从之前它就会按设定功能控制器

回答

-1

你选择的任何理由设置outputs变量中获得使用CakePHP?因为你好像不是利用其功能!

您正在使用文字SQL查询,因此基本上跳过模型functionality。您正在输出您的内容Controller?在使用输出缓冲时要小心,这可能与CakePHP的内部运作冲突,这在很多情况下也依赖于输出缓冲。因为你已经在这里输出内容(ob_flush()),所以你会在你的视图达到之前输出你的内容..

通常我会在手册中指向具体的points,但是,因为有这么多在这里错了,我建议开始阅读beginning

+0

你没有回答我的问题我知道MVC的工作原理和SQL查询或任何模型函数应该在模型中使用,但我问的是为什么变量不传递给视图。你的回答非常通用,任何人都可以这样回答。我认为我们需要针对那些可能正在寻找类似问题的答案的人更具体。 (毕竟这是什么stackoverflow是关于共享知识)我也尝试过去掉ob_flush,但它仍然无法工作... – 2013-03-23 10:55:06

+0

如果您尝试调试'$ outputs'的内容是什么?例如。把'debug($ outputs);'就在你调用'$ this-> set(compact('outputs'));'之前。 '$ outputs'变量似乎不会隐式声明/初始化,并且如果您的代码中未满足某些条件,则可能不存在 – thaJeztah 2013-03-23 11:06:16

+0

谢谢,我编辑了我的问题。请参考我刚才设置的函数的输出。我假设如果我声明DomDocument和DomXPath,那是我得到错误的地方。如果是这样,我可能不得不向Cake团队自己汇报,将其视为bug – 2013-03-23 11:28:47

相关问题