2013-03-23 2 views
2

Я пытаюсь передать переменную виду, и это очень странно, поскольку структура имен и каталогов правильная. Ниже приводится функция в мой контроллер:Функция набора тэгов не пропускает переменные от контроллера к виду

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')); 

    } 

я могу сделать pr на outputs переменной в представлении, но это выводит на 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' 
     ) 
    ) 
) 

Это то, что я получаю от outputs переменных только прежде чем он будет установлен с помощью функции набора в контроллере

ответ

-1

Любой причины вы выбрали использовать CakePHP? Потому что вы, кажется, не используйте его функциональность!

Вы используете буквальные SQL-запросы, поэтому в основном пропускаете Модели functionality.

Вы выводите свой контент с Controller? Будьте осторожны при использовании буферизации вывода, это может противоречить внутренней работе CakePHP, которая во многих случаях также зависит от буферизации вывода. Поскольку вы уже выводите содержимое здесь (ob_flush()), вы будете выводить свой контент до достижения вашего представления.

Обычно я указал бы на конкретный points в руководстве, потому что так много неправильно здесь, я бы предложил начать читать на beginning

+0

вы не отвечаете на мой вопрос Я знаю, как MVC работает, а SQL-запросы или любые функции модели должны использоваться внутри модели, но я спрашиваю, почему переменная, не проходящая к представлению. Ваш ответ очень общий, и любой может ответить на него таким образом. Я думаю, что мы должны быть более конкретными для людей, которые могут искать ответы на аналогичную проблему. (После всего этого происходит stackoverflow. Обмен знаниями) Я также попытался вынуть ob_flush, но он по-прежнему не работает ... –

+0

Что такое содержимое '$ output', если вы пытаетесь его отладить? Например. Положите 'debug ($ output);' Как раз перед тем, как вы вызовете $ this-> set (compact ('output')); '. Переменная '$ output', кажется, не объявлена ​​/ не инициализирована неявно и может не существовать, если определенные условия не выполняются в вашем коде – thaJeztah

+0

Спасибо, я отредактировал мой вопрос. Пожалуйста, обратитесь к выводам, которые я получаю перед заданной функцией. Я предполагаю, что объявляю DomDocument и DomXPath, вот где я получаю ошибки. Если это так, мне, возможно, придется отчитываться перед командой Cake, чтобы увидеть ее как ошибку. –

Смежные вопросы