我的代码:
// View/Activities/index.ctp
...
<div>
<?php echo $this->requestAction('/Activities/ajax_list/'.$categoryId,['return']);?>
</div>
...
//View/Activitest/ajax_list.ctp
....
<?php echo $this -> Html -> image("/img/add1.jpg"); ?>
...
<?php echo $this->Html->link('add_project', array('controller'=>'projects', 'action'=>'add', $categoryId)); ?>
....
我想要包含视图&#39; ajax_list&#39;进入&#39;索引&#39;,它已被显示,但图片和链接的网址错误。
然后我调试Cake / Routing / RequestActionTrait.php,&#34; requestAction&#34;函数我发现&#34; $ request = new Request($ params);&#34; $ request-&gt; base,$ request-&gt; webroot为空。
有人可以告诉我应该如何解决它?
答案 0 :(得分:3)
新请求中未设置的$base
/ $webroot
属性可能被视为错误,或者文档可能只是缺少正确的示例解决方案,我无法确定,您可能想要report this over at GitHub并看看开发者说的话。
requestAction()
!只要适用,您最好使用视图单元而不是请求操作,因为它们可以避免调度新请求所带来的所有开销。
参见 Cookbook > Views > View Cells
如果没有调用任何模型,而您所做的只是生成HTML,那么您可以简单地使用元素。
参见 Cookbook > Views > Elements
requestAction()
可能的解决方法是使用调度程序过滤器,使用必要的值填充空$base
/ $webroot
属性,例如
<强>的src /路由/过滤/ RequestFilterFix.php 强>
namespace App\Routing\Filter;
use Cake\Event\Event;
use Cake\Routing\DispatcherFilter;
class RequestFixFilter extends DispatcherFilter
{
public function beforeDispatch(Event $event)
{
$request = $event->data['request'];
/* @var $request \Cake\Network\Request */
if ($request->param('requested')) {
$request->base = '/pro';
$request->webroot = '/pro/';
$request->here = $request->base . $request->here;
}
}
}
<强>配置/ bootstrap.php中强>
// ...
// Load the filter before any other filters.
// Must at least be loaded before the `Routing` filter.
DispatcherFactory::add('RequestFix');
DispatcherFactory::add('Asset');
DispatcherFactory::add('Routing');
DispatcherFactory::add('ControllerFactory');
// ...
另请参阅 Cookbook > Routing > Dispatcher Filters > Building a Filter