Cakephp set函数不将变量从控制器传递到视图
我试图将变量传递给视图,这一个非常奇怪,因为命名和目录结构是正确的。以下是我的控制器中的功能:Cakephp set函数不将变量从控制器传递到视图,php,cakephp,Php,Cakephp,我试图将变量传递给视图,这一个非常奇怪,因为命名和目录结构是正确的。以下是我的控制器中的功能: public function validate_apply_link(){ App::uses('CakeEmail', 'Network/Email'); $this->layout = 'blank'; $listings = $this->CareersAndJob->query(" SELECT l
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'
)
)
)
这就是在控制器中的set函数设置变量之前,我从
输出
变量得到的结果您选择使用CakePHP的原因是什么?因为你似乎没有利用它的功能
您使用的是文字SQL查询,因此基本上跳过了模型
您正在从服务器输出您的内容?使用输出缓冲时要小心,这可能与CakePHP的内部工作冲突,在许多情况下,CakePHP也依赖于输出缓冲。因为您已经在此处输出内容(ob_flush()),所以您将在到达视图之前输出内容
通常我会指出手册中的具体内容,但是,因为这里有太多的错误,我建议从开始阅读您选择使用CakePHP的原因是什么?因为你似乎没有利用它的功能 您使用的是文字SQL查询,因此基本上跳过了模型 您正在从服务器输出您的内容?使用输出缓冲时要小心,这可能与CakePHP的内部工作冲突,在许多情况下,CakePHP也依赖于输出缓冲。因为您已经在此处输出内容(ob_flush()),所以您将在到达视图之前输出内容
通常我会指出手册中的具体内容,但是,因为这里有太多错误,我建议开始阅读您没有回答我的问题我知道MVC是如何工作的,SQL查询或任何模型函数都应该在模型中使用,但我要问的是,为什么变量没有传递到视图中。你的回答非常笼统,任何人都可以这样回答。我认为我们需要更具体地针对那些可能正在寻找类似问题答案的人。(毕竟这就是stackoverflow的意义。分享知识)我也尝试过使用ob_flush,但它仍然不起作用……如果您尝试调试它,
$outputs
的内容是什么?例如,Putdebug($outputs)代码>在调用$this->set(compact('outputs'))之前代码>。$outputs
变量似乎没有隐式声明/初始化,如果代码中未满足某些条件,则可能不存在。谢谢,我已编辑了我的问题。请参考我在设置函数之前得到的输出。我假设如果我声明了DomDocument和DomXPath,就会出现错误。如果是这样的话,我可能不得不向Cake团队报告,以将其视为一个bug,因为这些类是PHP本身的一部分,而不是CakePHP。如果禁用所有输出缓冲,会发生什么情况?您可能有错误,但由于输出缓冲区捕捉到了错误而将其抑制?正如我在顶部的初始注释中所提到的,我已尝试清除所有刷新,而且我没有错误。我也知道这些都是PHP本身的核心类。你没有回答我的问题。我知道MVC是如何工作的,SQL查询或任何模型函数都应该在模型中使用,但我想问的是,为什么变量没有传递到视图中。你的回答非常笼统,任何人都可以这样回答。我认为我们需要更具体地针对那些可能正在寻找类似问题答案的人。(毕竟这就是stackoverflow的意义。分享知识)我也尝试过使用ob_flush,但它仍然不起作用……如果您尝试调试它,$outputs
的内容是什么?例如,Putdebug($outputs)代码>在调用$this->set(compact('outputs'))之前代码>。$outputs
变量似乎没有隐式声明/初始化,如果代码中未满足某些条件,则可能不存在。谢谢,我已编辑了我的问题。请参考我在设置函数之前得到的输出。我假设如果我声明了DomDocument和DomXPath,就会出现错误。如果是这样的话,我可能不得不向Cake团队报告,以将其视为一个bug,因为这些类是PHP本身的一部分,而不是CakePHP。如果禁用所有输出缓冲,会发生什么情况?您可能有错误,但由于输出缓冲区捕捉到了错误而将其抑制?正如我在顶部的初始注释中所提到的,我已尝试清除所有刷新,而且我没有错误。我也知道这些是PHP本身的核心类