【问题标题】:How to know the controller and method name inside blade file in Laravel 6?如何知道 Laravel 6 刀片文件中的控制器和方法名称?
【发布时间】:2020-07-20 11:42:28
【问题描述】:

我是 Laravel 的新手。我正在练习在 Laravel 6 中建立博客。我有一个layout.blade.php 文件,其中编写了所有基本的 HTML。在layout.blade file 的内容部分,我想根据控制器和方法名称@include 其他刀片文件。

我有 2 个控制器,HomeControllerArticleController。在HomeController 文件中,有一个方法index() 返回视图home.blade.php。同样,home.blade.php@extendslayout.blade.php。现在想知道layout.blade.php文件里面是哪个控制器和方法调用了视图文件。

我想要这样的东西-

<!-- This is layout.blade.php file -->
<html>
<head>
</head>
<body>
  @if (Controller == HomeController AND Method == index)
    @include('home')
  @endif

  @if (Controller == ArticleController AND Method == index)
    @include('articles')
  @endif
</body>
</html>

我在 Google 上没有找到任何答案。我在 StackOverflow 中遇到了一些问题,但它们的答案非常混乱,而且这些版本也较旧。

谢谢。

编辑 1:

  1. 由于信誉分数低,我无法在 cmets 中回复。如我一般 新的,我知道刀片的一些基本标签,所以如果有其他的 解决方案,请与我分享。
  2. 我发现 Get Laravel 5 controller name in view 在提出这个问题之前。但我不认为它回答了我的 问题。
  3. 我知道Controller == HomeController AND Method == index 疯了。 我只是说明了我需要什么。我知道基本的@yield@section 标签,但我不想在我的情况下使用它。因为,如果我做一个 card/home 部分完全在不同的文件中,我可以调用它 其他文件稍后。如果我使用@yield,我将不得不使用@section 不同的文件,我不想这样做。

【问题讨论】:

  • 我认为Route::currentRouteAction() 应该可以解决问题,但您的方法对我来说似乎很奇怪。也许刀片 @stack 可以更好地满足您的需求。
  • 这能回答你的问题吗? Get Laravel 5 controller name in view
  • @IGP,请分享它作为答案。这就是我想要的。
  • @YasinPate,我在提出这个问题之前发现了这个问题,但遗憾的是它没有回答我的问题。
  • @S.M.Khalilullah,不检查控制器和动作,而是直接通过以下方式检查路由 url:if(Request::url() === 'your url here')

标签: php laravel laravel-blade laravel-6


【解决方案1】:

Route::currentRouteAction() 方法似乎是你想要的。它在 api 文档中。

string|nullcurrentRouteAction()

获取当前路由动作。

返回值 string|null

https://laravel.com/api/6.x/Illuminate/Routing/Router.html#method_currentRouteAction

【讨论】:

    【解决方案2】:

    如果我理解正确的话,你不需要做这种疯狂的事情

    Controller == HomeController AND Method == index
    

    如果您只想设置一个母版页。 Laravel 让它变得非常简单。

    这是母版页。

    <!-- Stored in resources/views/layouts/app.blade.php -->
    
    <html>
        <head>
            <title>App Name</title>
        </head>
        <body>
            <div class="container">
                @yield('content')
            </div>
        </body>
    </html>
    

    对于其他页面

    <!-- Stored in resources/views/index.blade.php -->
    
    @extends('layouts.app')
    
    @section('content')
        <p>This is my body content. From index page.</p>
    @endsection
    

    对于控制器,您只需返回blade.php 视图文件名。

        public function index()
        {
            return view('index');
        }
    

    【讨论】:

    • 谢谢。但我不想使用产量部分。相反,我想使用 include 之类的东西,因为如果我为特定部分创建文件,我可以在任何地方包含它而无需定义该部分。
    【解决方案3】:

    我运行这个来了解控制器。你可以试试。

    {{ dd(request()->route()->getAction()) }}
    

    【讨论】:

      猜你喜欢
      • 2023-03-26
      • 2020-09-04
      • 1970-01-01
      • 2018-06-30
      • 2014-12-27
      • 2019-05-07
      • 1970-01-01
      • 2020-11-11
      • 1970-01-01
      相关资源
      最近更新 更多