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