繁体   English   中英

ASP.NET MVC 到 PHP Laravel 的迁移:Html.RenderAction 替代方案

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM