2017-12-28 31 views
0

他の関数内で関数を呼び出す方法を理解できません。 下のスニペットは意味がありますか?他の関数内で関数を呼び出す

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関数を別の場所で作成して特定の場所から呼び出す必要がありますか?

UPDATE

だから私はこの通り抜けた - Laravel 5 - Where to define functions and call them in views & controllersと、それらのDB機能のための他のクラスを作成しました。 これで終わりました。私は

<?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'); 
    } 

} 

を使用したいそして今、私はそれがショーまだ

<?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')); 
    } 

私secoundクラス項目にcreatecat関数を呼び出すために試してみたい主な機能を保持している

コントローラ私は同じエラー、createcat関数からの変数は未定義です。

+0

ただput model_name :: function_name;例User :: try1($ test); –

+0

他の場所からアクセスできる機能については、https://stackoverflow.com/questions/28781073/laravel-5-where-to-define-functions-and-call-them-in-views-controllers – Spikolynn

+0

@ Spikolynn私はこの記事を読んだが、それでもエラーを示している。 – Rhercb

答えて

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

私の経験では、同じメソッドにメソッド固有のアクションを入れることが最も明白であることがわかりました。しかし、コードが複数の場所で必要とされる場合はもちろん異なります。その場合は、コードを別の(private)メソッドに抽出するほうがよいでしょう。

どちらの方法でも問題はありません。趣味や利便性(読みやすさ/明瞭さ)にも影響します。

メソッドのコンポジションの規約に関係なく、メソッドから値を取得する場合は、メソッドが呼び出された場所に値を渡すreturnステートメントを含める必要があります。

0

私はすべてを無視し、ビューアーにビューアーを使用するように学習者には、ビューに含めるたびにサイドバーが機能するようにしました。

関連する問題