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

时间:2016-10-02 02:31:53

标签: php 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回答和工作的原因

创建位于文件`app \ helpers.php

下的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"
    ],

在我看来调用函数

{{myGetDate()}}

2 个答案:

答案 0 :(得分:4)

这不是一个严格的规则,但使用框架的一部分是在某种程度上购买其惯例并将其用于您的优势。

一般来说,您的控制器用于处理HTTP(GET,POST,PUT等)。它们并非旨在通过您的视图调用方法的不加选择的方式。

我建议做这样的事情:

// app/Utilities.php
<?php

class Utilities
{
    public static function getDate()
    {
        // your code
    }
}

然后在你看来:

{{ Utilities::getDate() }}

或:

// app/helpers.php
<?php

if (! function_exists('myGetDate')) {
    function myGetDate()
    {
        // your code
    }
}

然后在你看来:

{{ myGetDate() }}

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

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

...或

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

然后运行composer dump-autoload

另一种解决方法可能是使用Blade Service Injection(在Laravel 5.1中引入)。这在技术上可以通过您的控制器来完成:

// In your blade template
@inject('service', 'App\Http\Controllers\HomeController')

{{ $service->getDate() }}

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

// app/Utilities.php
<?php

namespace App;

class Utilities
{
    public function getDate()
    {
        // your code
    }
}

// In your blade template
@inject('service', 'App\Utilities')

{{ $service->getDate() }}

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

对于它的价值,不知道关于你的项目的任何其他内容,我会选择前两个选项中的一个,更可能是helpers.php选项。

答案 1 :(得分:0)

试试这个:

   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 }}