【发布时间】:2021-05-04 21:47:05
【问题描述】:
我有一个包含以下代码部分的刀片文件。
@if($search_tags)
<div>
<hr>
<form action="/search-page/" method="get">
<label for='searchstr'><b>Key in Tags : </b></label>
<input type='text' id='searchstr' name='searchstr' class='form-control'><br>
<div class="center">
<input type='submit' name='search' class="btn btn-success" value = "Search"/>
<button type='button' class="btn btn-success">
<a href="{{ url('searchn') }}" style='color:white'>N</a></button>
</div>
</form>
<hr>
</div>
@else
<div>
<hr>
<form action="/search-page/" method="get">
<label for='searchstr'><b>Key in Name : </b></label>
<input type='text' id='searchstr' name='searchstr' class='form-control'><br>
<div class="center">
<input type='submit' name='search' class="btn btn-success" value = "Search"/>
<button type='button' class="btn btn-success">
<a href="{{ url('searchn') }}" style='color:white'>T</a></button>
</div>
</form>
<hr>
</div>
@endif
显示哪个 div 取决于变量 $search_tags 的值。 $search_tags 的布尔值通过单击按钮(在提交输入下方)进行更改。
我正在使用 Laravel 7,'searchn' 的路由记录为
// toggle search and search tags
Route::get('/searchn', 'PostController@toggle_search_tags');
PostController 函数 toggle_search_tags 是
public function toggle_search_tags()
{
$this->search_tags = ! $this->search_tags;
if (Auth::check()) {
return view('home')->withTitle($title)->withPosts($posts)->with('search_tags', $this->search_tags);
} else {
return view('home')->withTitle($title)->withPosts($posts)->with('search_tags', $this->search_tags);
}
}
显然,我只能单击一次按钮,即刀片文件只会更改视图中的 div 一次。之后,什么也没有发生。 $search_tags 的值没有变化,因此刀片文件也没有变化。
还有一件事。当我第一次启动应用程序时,浏览器上的 url 是 'localhost:8000'。在此 url,通过单击按钮,该 url 将更改为“localhost:8000/searchn”。在此之后,与变量和刀片文件一样,url 不会从“localhost:8000/searchn”更改。感觉我缺少一些基本的东西,但我不知道是什么。
提前感谢您的帮助。
【问题讨论】:
-
我相信你把 $search_tags 用作类属性是错误的,因为每次调用和执行控制器时它的值都设置为默认值,所以每次只显示一个 div 一遍又一遍.
-
感谢您的回复。我将 $search_tags 设为整数。它从 0 到 1。它永远不会回到 0,而是保持在 1。如果它不断实例化,它会回到 0,不是吗?
-
在您的控制器类中,我假设您将其初始化为 0。因此,当您访问 url 时,将调用控制器并将 $search_tags 设置为 0,然后当您到达 toggle_search_tags() 函数在该控制器中,该值然后设置为 1。因此,您将始终看到与值 1 关联的 div。
-
谢谢。是的,你是对的。如果这不是方法,那么我将不得不想出别的办法。但如果这是真的,那就意味着每次调用其中一个函数时都会实例化控制器!
-
确实如此,每次调用控制器都会启动它。我建议您在控制器中使用参数来知道要显示哪个 div