从laravel方法显示一些视图[关闭]

Posted

技术标签:

【中文标题】从laravel方法显示一些视图[关闭]【英文标题】:show some view from laravel method [closed] 【发布时间】:2019-10-29 23:01:26 【问题描述】:

我想在视图中显示我的内容,但它没有显示任何内容


public function myMethod(Request $request)

    $this->showQuestion()






public function showQuestion($tester, $testerAnswers, $user)
    
        $testerAnswerNum = $testerAnswers->count();

        $questionIdsAnswered = $testerAnswers->pluck('question_id');
        $question = UserAnswer::where("user_id", $tester->user_id)->whereNotIn('question_id', $questionIdsAnswered)->orderBy("created_at", "desc")->first();


        $question->question->items;

        $questionNum = UserAnswer::where("user_id", $tester->user_id)->count();
        $userName = $user->name;


        return view('create_answer.answer_a_question', compact('question', 'testerAnswerNum', 'questionNum', 'userName'));
    

和我的视图文件(create_answer.answer_a_question.blade.php):

<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>پاسخ به سوالات</title>

    <style>
        .item:hover
            background: #8BC34A;
        


        .item
            background: #eeeeee;
            float: right;
            width: 40%;
            margin: 10px;
            max-width: 200px;
        
        button 
            background-color: Transparent;
            background-repeat:no-repeat;
            border: none;
            cursor:pointer;
            overflow: hidden;
            outline:none;
        
        p
            text-align: center;
            margin: 10px;
        
        img
            max-width: 150px;
            max-height: 150px;
            display: block;
            margin-left: 0.1px;

        

        button.selected
            background:red;
        
    </style>
</head>
<body>




<p>$testerAnswerNum+1/$questionNum</p>

<p>$userName." ".$question->tester_question_text</p>





@for($i=0;$i<sizeof($question->items);$i++)
    @php

        $item=$question->items[$i];

    @endphp
    <div class="item border border-secondary rounded" onclick="redirect('$item->id')" >
        <img  class="img-fluid" src="$item->image" >
        <p class="d">$item->item_text</p>
    </div>

@endfor
<hr >
<br>
<br>
<button onclick="reload()"  style="background: #ffff;color: #3f9ae5;size: 10px;text-align: center">یک سوال دیگر</button>

<form  id="form" action="route('store_question')" method="post">
    @csrf
    <input  type="hidden" name="user_id" value="$user->id">
    <input  type="hidden" name="question_id" value="$question->id">
    <input  type="hidden" id="item_id" name="item_id"  >

</form>


</body>
</html>

还有我的 UserAnswer 文件:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class UserAnswer extends Model



    public function question()
    
        return $this->belongsTo(question::class);
    


我的问题模型:


<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class question extends Model



    public function items()
    
        return $this->hasMany(Item::class);
    

【问题讨论】:

我会检查文件结构...检查视图文件的扩展名(应该是 .blade.php),它必须在 resources/views/create_answer 中 视图应该像resources/views/create_answer/answer_a_question.blade.php @ceejayoz 和另一个用户都删除了此问题中为破坏问题质量过滤器而添加的材料,并恢复了两次。请不要这样做——可读性在这里很重要。谢谢! (问题质量过滤器并不完美,但如果您发现无法发布问题,请添加更多描述文本 - 总是可以添加更多材料。) 不要将问题编辑到invalidate existing answers。 【参考方案1】:

您试图“跳过”question 关系以获取 items

所以只需从一个“未回答的答案”中选择question_id,然后使用with('items') 获取问题。

也不清楚你是如何得到$tester, $testerAnswers, $user的。

以下是如何解决您的问题的想法:

行动:

public function showQuestion($tester, $testerAnswers, $user)

    $testerAnswerNum = $testerAnswers->count();

    $questionIdsAnswered = $testerAnswers->pluck('question_id');
    $unansweredOne = UserAnswer::where("user_id", $tester->user_id)
                               ->whereNotIn('question_id', $questionIdsAnswered)
                               ->orderBy("created_at", "desc")
                               ->first(['question_id']);

    $question = question::with('items')->find($unansweredOne->question_id);

    $questionNum = UserAnswer::where("user_id", $tester->user_id)->count();
    $userName = $user->name;


    return view('answers.answer_a_question', compact('question', 'testerAnswerNum', 'questionNum', 'userName'));


public function myMethod(Request $request) 
 
    /* 
      here You get:
        $tester
        $testerAnswers
        $user
      to pass them as arguments of
      method on next line
    */
    return $this->showQuestion($tester, $testerAnswers, $user);
 

查看:

@foreach($question->items AS $item)

    <div class="item border border-secondary rounded" onclick="redirect('$item->id')" >
        <img  class="img-fluid" src="$item->image" >
        <p class="d">$item->item_text</p>
    </div>

@endforeach

同时更改文件名 来自:create_answer.answer_a_question.blade.php 至:answer_a_question.blade.php 并将其放入文件夹中:resources/views/answers/(如果不存在则创建) 请记住 laravel view helper .(点)表示 /(目录分隔符)。

【讨论】:

你能告诉我是什么问题吗? @AliGhafari 这只是一个猜测,请阅读我的更新答案 感谢帮我解决问题,你可以看我自己的回答【参考方案2】:

我发现了问题!您正在调用该函数,但没有返回任何内容。

在上面的问题中,myMethod()myMethod()showQuestion() 方法返回视图不要使用它,它可以在 myMethod() 中添加返回视图,如下所示:

public function myMethod(Request $request)

    $this->showQuestion()

应该改为:

public function myMethod(Request $request)

     return $this->showQuestion();

【讨论】:

这可以用一些缩进,关键是分号和美元符号。

以上是关于从laravel方法显示一些视图[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

laravel-admin 关闭debug模式导致异常信息到页面的排查

从资源文件夹中获取图像 - Laravel

将数组从 AuthController 传递到 Laravel 5 中的登录视图

larave学习笔记1-安装配置

laravel compact的用法

laravel compact的用法