其他功能内部调用功能

时间:2017-12-28 13:24:46

标签: php laravel-5

我无法弄清楚如何在另一个函数中调用函数。 下面的代码段是否有意义?

public function createcat()
{
    $kat_id = kategorijas::find('id');
    $apakskat = apakskategorijas::where('kategorijas_id','=',$kat_id)->get();
    $kat = kategorijas::with('apakskategorija')->get(); 
    //$list = compact('kat','apakskat','apakskat_count');
}

public function mainpage()
{
    // $kat_id = kategorijas::find('id');
    // $apakskat = apakskategorijas::where('kategorijas_id','=',$kat_id)->get();
    // $kat = kategorijas::with('apakskategorija')->get(); 
    $list = $this->createcat();     
    return view ('views.home',compact('list'));
}

问题是,其他视图需要createcat函数才能正常工作,否则会显示视图没有createcat函数中的变量的错误。

这甚至是一个好习惯吗?或者createcat函数应该在别处创建并从某个地方调用?

更新

所以我经历了这个 - Laravel 5 - Where to define functions and call them in views & controllers并为这些数据库函数创建了其他类。 结束了这一点。

拥有我想要使用的主要功能的控制器

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Database\Eloquent\Model;
use DB;
use App\Quotation;
use App\kategorijas;
use App\apakskategorijas;

class katcontroller extends Controller
{

    public static function createcat()
    {
        $kat_id = kategorijas::find('id');
        $apakskat = apakskategorijas::where('kategorijas_id','=',$kat_id)->get();
        $kat = kategorijas::with('apakskategorija')->get(); 
        return compact('kat','apakskat','apakskat_count');
    }

}

现在我想尝试在我的secound类项目中调用createcat函数

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Database\Eloquent\Model;
use DB;
use App\Http\Controllers\katcontroller;



class routes extends katcontroller
{

    // public function createcat()
    // {
    //  $kat_id = kategorijas::find('id');
    //  $apakskat = apakskategorijas::where('kategorijas_id','=',$kat_id)->get();
    //  $kat = kategorijas::with('apakskategorija')->get(); 
    //  $list = compact('kat','apakskat','apakskat_count');

    // }
    public function mainpage()
    {
        // $kat_id = kategorijas::find('id');
        // $apakskat = apakskategorijas::where('kategorijas_id','=',$kat_id)->get();
        // $kat = kategorijas::with('apakskategorija')->get(); 
        $function = $this->createcat();     
        return view ('views.home',compact('function'));
    }

它仍然显示同样的错误,来自createcat函数的变量是未定义的。

3 个答案:

答案 0 :(得分:1)

这应该有效(假设你在课堂上),除了createcat()没有返回任何东西。所以当你$list = $this->createcat();时,$ list是null。我相信你想这样做:

public function createcat()
{
    $kat_id = kategorijas::find('id');
    $apakskat = apakskategorijas::where('kategorijas_id','=',$kat_id)->get();
    $kat = kategorijas::with('apakskategorija')->get(); 
    return compact('kat','apakskat','apakskat_count');
}

答案 1 :(得分:1)

根据我的经验,我发现将方法特定的操作放在同一个方法中是最清楚的。但是,如果在多个地方需要代码,那么当然这是不同的,在这种情况下,您最好将其提取到单独的(private)方法。

任何一种工作方式都没有错,只是归结为偏好和便利(可读性/清晰度)。

无论方法组成约定如何,如果要从方法中获取值,它应该包含一个return语句,该语句将值传递给调用方法的任何位置。

答案 2 :(得分:0)

所以我忽略了我所做的一切,并学习使用视图编辑器,这样每次我将其添加到视图中时我的侧边栏都会工作。