[英]ASP.NET MVC to PHP Laravel Migration: Html.RenderAction Alternative
我目前正在使用基于我过去制作的现有 ASP.NET MVC 版本的 PHP Laravel (5.4) 开发 CMS。 由于大多数 ASP.NET 版本是用 JS 编写的,我正在尝试在我正在开发的较新的 Laravel 版本中尽可能地重用。 我已经将大部分 C# 代码翻译成 PHP,感谢 Laravel 与 ASP.NET MVC 架构的相似性,这有点简单。
目前我正面临一个问题,试图从视图中调用控制器操作,该操作将依次呈现部分视图。 在 ASP.NET MVC 版本中,我使用Html.RenderAction
帮助程序完成了此操作。
ASP.NET MVC 示例:
<div>
@{Html.RenderAction("Controller", "Action");}
</div>
我想知道是否有任何替代Html.RenderAction
助手的方法可以用来完成此任务。
我搜索了互联网和 Laravel 的文档,从我能找到的内容来看,View Composers 似乎是最接近的选择。 不幸的是,我没有找到任何可以解决我的问题的示例。
@Farrukh 建议使用 View Composers,它确实按预期工作。 问题是我需要为我想要呈现的每个部分视图添加一个视图编辑器到 AppServiceProvider。
我找到了另一种解决方案,它允许我从视图中调用操作并呈现局部视图:
<?php echo \App\Http\Controllers\PageController::listAll(); ?>
但是这个解决方案似乎不是很干净。
ViewComposer 的行为就像一个全局组件,您所要做的就是将您的业务逻辑放入模型中的方法中。
例如
class Post extends Model {
public static function archives() {
return static::selectRaw('your query here')
->get()
->toArray();
}
}
然后转到 providers/AppServiceProvider.php
将您的 viewcomposer 代码添加到 boot 方法(在任何视图加载之前的一个钩子)。
例如
@include('layouts.sidebar')
在 AppServiceProvier 中,启动方法:
public function boot() {
view()->composer('layouts.sidebar', function($view) {
$view->with('archives', \App\Post::archives());
});
}
您可以使用服务注入:
<div>
@{Html.RenderAction("Controller", "Action");}
</div>
在 Laravel 中将是:
@inject('Controller', 'App\Http\Controllers\HomeOrOtherController')
{!! $Controller->action() !!}.
有了这个,您将在视图中呈现控制器中动作视图的内容。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.