从视图laravel中的控制器调用函数


calling function from controller in view laravel

这实际上是一件简单的事情,但由于我是laravel的新手,所以我有这个函数

class HomeController extends Controller {
    public $layout = 'layouts.master';
    public function __construct()
    {
        $this->middleware('auth');
    }
    public function index()
    {
        return view('landing-page')
       ->with('title','Landing Page')
       ->with('users',User::member()->get());
    }
    <!-- HOW TO CALL getDate Function in my view -->
    public function getDate(){
       $mytime = Carbon::now()->format('f');
       $response = array
                (
                    'content' =>$mytime,
                    'status'  =>'success',
                );
       return Response::json($response)->view('landing-page');      
   }
}

如何在laravel视图中调用它?我在互联网上搜索,但我不太明白,因为编程对我来说是新的,我已经尝试过这样的东西,在我看来使用路线{{url('date')}}, {{$mytime}},但没有工作,好吧,我可以调用一个函数,如果有一定的事件发生,如点击按钮或其他,但如果没有特定的事件,它很困惑我

<p>Month :{{url('date')}}</p>
<p>Month :{{$mytime()}}</P>
上面是我尝试调用函数 的一些方法

更新我尝试过的基于@tptcat的答案和工作

创建helpers.php位于files ' app'helpers.php

<?php
use Carbon'Carbon;
if (! function_exists('myGetDate')) {
    function myGetDate()
    {
       $mytime = Carbon::now()->format('F');
      return $mytime
    }
}

composer.json

"autoload": {
    "files":[
        "App/helpers.php"
    ],

在my view中调用函数

{{myGetDate()}}

这不是一个硬性的规则,但使用框架的一部分是在某种程度上接受它的约定,并利用它们来发挥你的优势。

一般来说,你的控制器是用来处理HTTP的(GET, POST, PUT等)。它们不是被设计成不分青红皂白地从视图中调用方法。

我建议这样做:

// app/Utilities.php
<?php
class Utilities
{
    public static function getDate()
    {
        // your code
    }
}

then in your view:

{{ Utilities::getDate() }}

或:

// app/helpers.php
<?php
if (! function_exists('myGetDate')) {
    function myGetDate()
    {
        // your code
    }
}

then in your view:

{{ myGetDate() }}

,然后在composer.json中自动加载您创建的文件:

"autoload": {
    "files": [
        "app/Utilities.php"
    ]
}

还是……

"autoload": {
    "files": [
        "app/helpers.php"
    ]
}

,然后运行composer dump-autoload

另一种方法是使用Blade服务注入(在Laravel 5.1中引入)。从技术上讲,这可以通过控制器完成:

// In your blade template
@inject('service', 'App'Http'Controllers'HomeController')
{{ $service->getDate() }}

但是我仍然建议不要在你的控制器中有一个方法来负责返回这个数据,如果它将被作为一个方法从刀片模板调用。使用某种类型的服务类会更合适:

// app/Utilities.php
<?php
namespace App;
class Utilities
{
    public function getDate()
    {
        // your code
    }
}
// In your blade template
@inject('service', 'App'Utilities')
{{ $service->getDate() }}

,在这种情况下,不需要将其添加到composer.json中的files自动加载数组中。

无论如何,我对你的项目一无所知,我会选择前两个选项之一,更有可能是helpers.php选项。

试试这个:

   class HomeController extends Controller {
      public function __construct()
      {
          $this->middleware('auth');
      }
      public function index()
      {
        $title  = 'Landing Page';
        $users  = 'User::member() - > get();
        $mytime = 'Carbon::now()->format('f');
        return view('layouts.master.landing-page', [
            'title'        => $title,
            'users'        => $users,
            'mytime'       => $mytime
          ]
        );
      }
    }

要在登陆页面视图中显示它,你可以使用:

{{ $title }}
{{ $users }}
{{ $mytime }}