Bar*_*zek 5 php user-interface laravel
我遇到一个问题,我不想在某些视图中显示X元素.
真正的例子是,我不希望显示在页面上的产品形象滑块contact和about us,但它应该是在所有其他页面上看到(约6个)
因此,如何排除渲染在div ñ的米页面未做很长的@if条件是什么?对于时尚解决方案的想法?
编辑
回答我为什么不想把它放在独立视图文件中的问题:
想象一下,除了特定的视图外,您希望所有视图中都显示此行,并且只有一个
<span>Lorem Ipsum</span>
Run Code Online (Sandbox Code Playgroud)
这只是一行HTML代码,不值得在项目中创建另一个文件,因为它会在项目文件树中混乱,另一个例子是一个糟糕的解决方法
@if(\Request::route()->getName() !== "some.very.long.route.alias.name.that.looks.ugly")
<span>Lorem Ipsum</span>
@endif
Run Code Online (Sandbox Code Playgroud)
使项目增长时难以阅读和理解代码
编辑2
我预测了一些建议的解决方案,并已经写了为什么这不适合处理这个问题.我看起来更有可能找到类似于@can或@cannot取决于当前路线的解决方案
编辑3: 解决方案
编辑4: 我在这里发布了一个答案,但它还不完美(我不会将其标记为已接受),所以对于本主题的读者我将在下面粘贴它的副本
好的,我已经制作了一个简单的刀片指令,以一种漂亮的方式解决了这个问题
首先,创建一个数组,确定html代码段的路由访问权限
最佳位置是在config目录中创建此文件,例如presence.php文件Run Code Online (Sandbox Code Playgroud)<?php return [ 'ipsum' => [ // presence alias 'about', // disallowed route #1 'contact' // disallowed route #2 ], ];然后在
AppServiceProvider.php类中创建一个指令Run Code Online (Sandbox Code Playgroud)<?php namespace App\Providers; use Illuminate\Support\Facades\Blade; use Illuminate\Support\ServiceProvider; class AppServiceProvider extends ServiceProvider { /** * Bootstrap any application services. * * @return void */ public function boot() { Blade::directive('presence', function($alias) { return "<?php if (in_array(\Request::route()->getName(),config('presence.'.$alias))):?>"; }); Blade::directive('endpresence', function() { return '<?php endif; ?>'; }); } /** * Register any application services. * * @return void */ public function register() { // } }并在html视图中最终使用此技巧
Run Code Online (Sandbox Code Playgroud)@presence('ipsum') <span>Lorem Ipsum</span> @endpresence
Lorem Ipsum如果当前路由名称不在ipsum数组中(它在\App\config\presence.php文件中声明,因此我们可以使用config()helper方法访问它),它将打印如果我可以处理通配符,那会很棒
Run Code Online (Sandbox Code Playgroud)<?php return [ 'ipsum' => [ // presence alias 'admin.category.*', // advanced route pattern #1 'admin.users.*' // advanced route pattern #2 ], ];但我稍后会研究它.
总是欢迎反馈或批评:)
好的,我做了一个简单的刀片指令,以一种美观的方式解决了这个问题
首先,创建一个数组来确定 html 片段的路由访问
最好的位置是在 config 目录中创建此文件,例如一个presence.php文件
<?php
return [
'ipsum' => [ // presence alias
'about', // disallowed route #1
'contact' // disallowed route #2
],
];
Run Code Online (Sandbox Code Playgroud)
AppServiceProvider.php然后在类中创建一个指令
<?php
namespace App\Providers;
use Illuminate\Support\Facades\Blade;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
Blade::directive('presence', function($alias) {
return "<?php if (in_array(\Request::route()->getName(), config('presence.'.$alias))): ?>";
});
Blade::directive('endpresence', function() {
return '<?php endif; ?>';
});
}
/**
* Register any application services.
*
* @return void
*/
public function register()
{
//
}
}
Run Code Online (Sandbox Code Playgroud)
最后在 html 视图中使用这个技巧
@presence('ipsum')
<span>Lorem Ipsum</span>
@endpresence
Run Code Online (Sandbox Code Playgroud)
Lorem Ipsum如果当前路由名称不在ipsum数组中(在文件中声明\App\config\presence.php,以便我们可以使用config()辅助方法访问它),它将打印
如果我可以处理通配符,比如
<?php
return [
'ipsum' => [ // presence alias
'admin.category.*', // advanced route pattern #1
'admin.users.*' // advanced route pattern #2
],
];
Run Code Online (Sandbox Code Playgroud)
但我稍后会研究一下。
随时欢迎反馈或批评:)