我无法弄清楚如何在另一个函数中调用函数。 下面的代码段是否有意义?
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函数的变量是未定义的。
答案 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)
所以我忽略了我所做的一切,并学习使用视图编辑器,这样每次我将其添加到视图中时我的侧边栏都会工作。