Tri*_*rey 2 ajax dry laravel laravel-4
我正在尝试通过使用Request :: ajax()方法从我的控制器生成ajax特定响应,该方法工作得很好.唯一的问题是我现在设置它的方式并不是一个很好看的解决方案.
我的控制器:
class HomeController extends BaseController {
protected $layout = 'layouts/main';
public function __construct()
{
$this->beforeFilter('auth');
}
public function getIndex()
{
$view = View::make('content.home.index');
if(Request::ajax()) return $view; //For ajax calls we only want to return the content to be placed inside our container, without the layout
$this->layout->menu = 'content.menu';
$this->layout->content = $view;
}
}
Run Code Online (Sandbox Code Playgroud)
所以现在,对于我在控制器中定义的每个方法,我需要添加检查AJAX请求的代码片段,如果语句返回true,则返回单个视图.
这导致我的问题可能与PHP相关,而不是框架;
有没有办法在每个方法调用上执行我的AJAX检查,而不是实际将它放在方法中?还是有其他解决方案来保持我的代码干?
提前致谢!
PS:这是我关于stackoverflow的第一篇文章,如果我犯了任何错误,请随时纠正我
tha*_*max 10
创建一个名为'layouts/ajax'(或您喜欢的任何名称)的新准系统布局.
<?php echo $content ?>
Run Code Online (Sandbox Code Playgroud)
在Base控制器中,覆盖此setupLayout()功能.
protected function setupLayout()
{
if ( ! is_null($this->layout))
{
$layout = Request::ajax() ? 'layouts/ajax' : $this->layout;
$this->layout = View::make($layout);
}
}
Run Code Online (Sandbox Code Playgroud)
将您的getIndex()功能更改为此.
public function getIndex()
{
$view = View::make('content.home.index');
$this->layout->menu = 'content.menu';
$this->layout->content = $view;
}
Run Code Online (Sandbox Code Playgroud)
现在非ajax请求将使用layout控制器中的set 进行渲染,其中ajax请求将接收任何设置$this->layout->content.
注意:setupLayout()如果被调用的方法返回truthy值,Controller将忽略布局设置.因此,此方法不适用于以下功能.
public function getIndex()
{
return View::make('content.home.index');
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5275 次 |
| 最近记录: |