【问题标题】:Cakephp set function not passing variables from controller to the viewCakephp 设置函数不将变量从控制器传递到视图
【发布时间】:2013-03-23 08:07:40
【问题描述】:

我正在尝试将变量传递给视图,这个变量非常奇怪,因为命名和目录结构是正确的。以下是我的控制器中的功能:

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

这是我在 outputs 变量被控制器中的 set 函数设置之前得到的结果

【问题讨论】:

    标签: php cakephp


    【解决方案1】:

    您选择使用 CakePHP 的任何原因?因为您似乎没有使用它的功能!

    您使用的是文字 SQL 查询,因此基本上跳过了模型 functionality

    您是从Controller 输出内容吗?使用输出缓冲时要小心,这可能与 CakePHP 的内部工作相冲突,CakePHP 在许多情况下也依赖于输出缓冲。因为您已经在此处输出内容(ob_flush()),所以您将在到达您的视图之前输出您的内容..

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

    【讨论】:

    • 你没有回答我的问题我知道 MVC 是如何工作的,SQL 查询或任何模型函数都应该在模型中使用,但我要问的是为什么变量没有传递到视图.你的回答很笼统,任何人都可以这样回答。我认为我们需要更具体地针对可能正在寻找类似问题的答案的人。 (毕竟这就是stackoverflow的意义。分享知识)我也试过取出ob_flush,但它仍然不起作用......
    • 如果您尝试调试,$outputs 的内容是什么?例如。在您致电$this->set(compact('outputs')); 之前输入debug($outputs);$outputs 变量似乎没有被隐式声明/初始化,如果您的代码中不满足某些条件,则可能不存在
    • 谢谢,我已经编辑了我的问题。请参考我在 set 函数之前得到的输出。我假设如果我声明 DomDocument 和 DomXPath,那就是我遇到错误的地方。如果是这样,我可能不得不向 Cake 团队自己报告以将其视为错误
    • 这些类是 PHP 本身的一部分,而不是 CakePHP; php.net/manual/en/class.domdocument.php。如果禁用所有输出缓冲会发生什么?您可能遇到错误,但由于输出缓冲区捕获了它们而将它们抑制?
    • 正如我在顶部最初的评论中提到的,我已经尝试取出所有的冲洗并且我没有错误。我也知道这些是 PHP 本身的核心类
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-19
    • 1970-01-01
    • 2012-02-10
    • 2014-12-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多