簡體   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