Php 在Laravel中将刀片文件用作小部件
我遇到过这样一种情况:用户有一个主页,其中充满了他们可以通过点击添加或删除的小部件 每个小部件本质上只是存储在Php 在Laravel中将刀片文件用作小部件,php,laravel,Php,Laravel,我遇到过这样一种情况:用户有一个主页,其中充满了他们可以通过点击添加或删除的小部件 每个小部件本质上只是存储在resources/views/widgets 一个例子: @php $widgetNo = 15; $exist = false; @endphp @hasanyrole('News Contributor|News Approver') <div class="grid-item element-item"> <section class="wid
resources/views/widgets
一个例子:
@php
$widgetNo = 15;
$exist = false;
@endphp
@hasanyrole('News Contributor|News Approver')
<div class="grid-item element-item">
<section class="widget" id="articles-cms">
<div class="form-box widget light_blue">
<div class="row header">
<div class="col-xs-10">
<div class="heading">
<h2>News articles</h2>
</div>
</div>
<div class="col-xs-2 AddWidget">
@if(Route::current()->uri() == 'welcome')
<i class="fa fa-bars "></i>
@elseif(Route::current()->uri() == 'widget-library')
<form action="{{action('WidgetController@store')}}" method="POST">
@csrf
<input type="hidden" name="user_id" value="{{$user->id}}">
<input type="hidden" name="widgets" value="12">
<button type="submit">
<i class="fa fa-plus "></i>
</button>
</form>
@else @endif
</div>
</div>
<div class="row">
<div class="form-group col-xs-12 col-md-12">
<p class="info">Create and edit News and updates</p>
<a href="/editable/news-and-updates" class="btn btn-filled-navy btn-full-width no-margin">Click Here</a>
</div>
</div>
</div>
</section>
</div>
@endrole
有了这个,我可以利用视图中的关系
我在小部件模型中也有这两种方法
/**
* Get the user that has this Widget
*/
public function user()
{
return $this->belongsTo(User::class, 'user_id', 'id');
}
/**
* Check whether a given user has this Widget
*/
public function getIsSelected()
{
$selected = $this->user()->whereUserId(Auth::user()->id)->first();
return (!is_null($selected)) ? true : false;
}
这样我就可以检查用户是否选择了小部件
目前,在我的主页上,我只有一个switch语句
@foreach ($user->widgets as $widget)
@switch($widget->widget_id)
@case (1)
@include('widgets.quick-search-full-width')
@break;
@case(2)
@include('widgets.calendar')
@break;
@case (3)
@include('widgets.suggestion')
@break;
@case (4)
@include('widgets.task')
@break;
@case (5)
@include('widgets.quick-search')
@break;
@case (6)
@include('widgets.message')
@break;
@case(7)
@include('widgets.find-expert')
@break;
@case (8)
@include('widgets.holiday')
@break;
@case (9)
@include('widgets.expenses')
@break;
@case (10)
@include('widgets.snap-pole')
@break;
@case (11)
@include('widgets.teams-cms')
@break;
@case (12)
@include('widgets.events-cms')
@break;
@case (13)
@include('widgets.team-cms')
@break;
@case (14)
@include('widgets.article-todo')
@break;
@case (15)
@include('widgets.article-cms')
@break;
@case (16)
@include('widgets.vacancies')
@break;
@case(17)
@include('widgets.yammer')
@break;
@default
<h3>You currently have no widgets</h3>
@endswitch
@endforeach
@foreach($user->widgets作为$widget)
@开关($widget->widget\u id)
@案例(1)
@包括('widgets.quick search full width')
@中断;
@案例(2)
@包括('widgets.calendar')
@中断;
@案例(3)
@包括('widgets.suggestion')
@中断;
@案例(4)
@包括('widgets.task')
@中断;
@案件(5)
@包括('widgets.quick search')
@中断;
@案件(6)
@包括('widgets.message')
@中断;
@案件(7)
@包括('widgets.find expert')
@中断;
@案件(8)
@包括('widgets.holiday')
@中断;
@案件(9)
@包括('widgets.expenses')
@中断;
@案件(10)
@包括('widgets.snap pole')
@中断;
@案件(11)
@包括('widgets.teams cms')
@中断;
@案件(12)
@包括('widgets.events cms')
@中断;
@案件(13)
@包括('widgets.team cms')
@中断;
@案件(14)
@包括('widgets.article todo')
@中断;
@案件(15)
@包括('widgets.article cms')
@中断;
@案件(16)
@包括('widgets.expansions')
@中断;
@案件(17)
@包括('widgets.yammer')
@中断;
@违约
您当前没有小部件
@终端开关
@endforeach
我的问题是,有没有更好的方法拉入或使用这些小部件,因为目前很明显,小部件的显示完全取决于使用vanilla PHP的小部件中是否有ID。您可以在数据库中有blade_name字段,因此在这种形式下,例如,您在该小部件的记录中有“calendar”。 因此,您可以像这样添加小部件
@foreach ($user->widgets as $widget)
@include('widgets.'.$widget->blade_name)
@endforeach
使用这种方法,您会使用单个窗口小部件表还是只将刀片名称添加为一个额外字段?作为窗口小部件表中其他fieldsHow旁边的一个额外字段,您会以编程方式添加刀片名称吗?现在我得到了您的问题,我想,您应该有一个表,其中包含具有字段刀片名称的窗口小部件,你的widget_id指的是什么?这仅仅是硬编码吗?我将小部件ID硬编码到每个HTML块中,但是这种方法似乎有点松散
@foreach ($user->widgets as $widget)
@include('widgets.'.$widget->blade_name)
@endforeach