ASP.NET MVC to PHP Laravel Migration: Html.RenderAction Alte



我目前正在使用PHP Laravel(5.4)开发一个CMS,基于我过去制作的现有 ASP.NET MVC版本。由于大多数 ASP.NET 版本都是用JS编写的,因此我正在尝试在我正在开发的较新的Laravel版本中重用尽可能多的内容。我已经将大部分 C# 代码翻译成 PHP,这要归功于 Laravel 与 MVC 架构 ASP.NET 相似之处,这有点简单。

目前,我尝试从视图中调用控制器操作时遇到问题,该操作将反过来呈现部分视图。在 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 AppHttpControllersPageController::listAll(); ?>

但是这个解决方案似乎不是很干净。

ViewComposer 的行为类似于全局组件,您所要做的就是将业务逻辑放入模型中的方法中。

例如

class Post extends Model {
public static function archives() {
return static::selectRaw('your query here')
->get()
->toArray();
}
}

然后转到提供程序/应用服务提供商.php

将视图编辑器代码添加到引导方法(任何视图加载之前的挂钩)中。

例如

@include('layouts.sidebar')

在 AppServiceProvier 中,引导方法:

public function boot() {
view()->composer('layouts.sidebar', function($view) {
$view->with('archives', AppPost::archives());
});
}

您可以使用服务注入:

<div>
@{Html.RenderAction("Controller", "Action");}
</div>

在拉拉维尔将是:

@inject('Controller', 'AppHttpControllersHomeOrOtherController')
{!! $Controller->action() !!}.

这样,您将在视图中呈现控制器中操作的视图的内容。

最新更新