如何在laravel View中调用方法?

时间:2017-03-16 05:53:36

标签: php laravel laravel-5

我有控制器,它将加载视图部分

public function homePage(){
    $categories = Category::all();
    $products = Product::all();
    return view('cart.index',compact('categories','products'));
}

这是视图(基本上检查子类别是否会显示否则跳过)

<ul class="list-group list-group-bordered list-group-noicon uppercase">
    <li class="list-group-item active">
        @foreach($categories as $row)
            <a class="dropdown-toggle" href="#">{{$row->name}}</a>
            @if({{StapsController::checkSubcategory($row->id)}})
                @foreach($subcategories as $sub)
                    <ul>                                        
                        <li><a href="#"><span class="size-11 text-muted pull-right">(123)</span> {{$sub->s_name}}</a></li>          
                    </ul>
                @endforeach 
            @else
                <li class="list-group-item"><a href="#"><span class="size-11 text-muted pull-right">(189)</span> {{$row->name}}</a></li>
            @endif
        @endforeach

    </li>
</ul>   

以下是checkSubcategory方法

public function checkSubcategory($id){
    $category = Category::find($id);
    $id = $category->id;
    $subcategories = DB::table ('subcategories')
        ->join('categories_subcategories','subcategories.id','=','categories_subcategories.subcategory_id')
        ->join('categories','categories_subcategories.category_id','=','categories.id')
        ->where('categories.id','=',$id)
        ->select('subcategories.name as s_name ')
        ->get(); 

    return $subcategories;
}

但是我在View中的调用方法中遇到了语法错误? 什么可能是错误..在视图部分调用方法有什么错误吗?

6 个答案:

答案 0 :(得分:0)

如果checkSubcategory的逻辑在控制器本身中正常工作,则必须将其传输到模型。即使它成为模型的方法,从视图中你可以做如下的事情:

....
<a class="dropdown-toggle" href="#">{{$row->name}}</a>
                                        @if({{$row->checkSubcategory($row->id);}})
                                        <ul>
....

换句话说,在Category模型中定义此方法。

答案 1 :(得分:0)

将您的功能放在其他地方,而不是控制器。在你的情况下,也许在Category模型内?

然后,在View中,您可以像这样使用您的功能:

$row->checkSubcategory($row->id)

无需使功能静止。

答案 2 :(得分:0)

使用这样的关系并通过对象调用。

public function checkSubcategory()
{
    return $this->hasMany('App\subcategories');
}

答案 3 :(得分:0)

可以有一种方法可以轻松完成 -

  1. 自定义助手功能
  2. 自定义帮助程序功能 我个人更喜欢你使用自定义辅助函数,因为你可以在项目的任何地方调用这个函数。

    • app / Http 目录中,创建 helpers.php 文件并添加 你的职能。
    • composer.json 中,在自动加载功能块中添加"files": ["app/Http/helpers.php"]
    • 运行composer dump-autoload

    现在,无论您在 helpers.php 文件中写什么,都可以轻松访问。

    **注意:请记住,在 helpers.php 文件中,所有代码都需要基于函数。不要在此文件中使用class。

答案 4 :(得分:0)

在视图中调用方法不是一个好习惯。在这种情况下,要么创建帮助文件并使用composer加载文件,要么可以使用查询范围。试试看。使用查询范围

首先在您的类别模型中添加此内容。

function scopeCheckSubcategory(){
      DB::raw('(SELECT subcategories.name as s_name
       FROM `subcategories`
       INNER JOIN categories_subcategories on categories_subcategories.subcategory_id = subcategories.id 
       AND categories_subcategories.category_id = categories.id') AS s_name'
      )
}

现在调用范围

$categories = Category::CheckSubcategory->get();

现在检查您的刀片文件

@if($row->s_name)
...
...
@endif

答案 5 :(得分:0)

您的刀片有几个问题,这里是更正版本,

<ul class="list-group list-group-bordered list-group-noicon uppercase">
    <li class="list-group-item active">
        @foreach($categories as $row)
            <a class="dropdown-toggle" href="#">{{$row->name}}</a>
            <ul>
                @if(StapsController::checkSubcategory($row->id)) 
                    <li>
                        <a href="#">
                            <span class="size-11 text-muted pull-right">(123)</span> {{$sub->s_name}}
                        </a>
                    </li>
                @else
                    <li class="list-group-item">
                        <a href="#">
                            <span class="size-11 text-muted pull-right">(189)</span> {{$row->name}}
                        </a>
                    </li>
                @endif
            </ul>
        @endforeach 
    </li>
</ul> 
  1. @if({{StapsController::checkSubcategory($row->id);}})此行错误(语法错误
  2. 您已撰写两份endforeach语句
  3. 您的if statementendforeach声明
  4. 之后关闭
  5. missing ul
  6. 中有else statement个标记

    检查上面我希望这有帮助。

相关问题