【问题标题】:Laravel : Toggling Display using the value of a Controller variableLaravel:使用控制器变量的值切换显示
【发布时间】: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

标签: php html laravel


【解决方案1】:

在 Laravel 框架中使用 PHP 是完全错误的方向。我坏。解决方案是在 Javascript 中实现将 div 的内容与

elem = document.getElementById('searchport');
elem.innerHTML = 'stuff that goes into the div';

决定哪个屏幕的逻辑也很容易使用 JS。 造成的不便深表歉意。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-20
    • 1970-01-01
    • 2021-04-05
    • 1970-01-01
    • 2013-06-06
    • 1970-01-01
    • 2020-12-05
    • 2018-01-06
    相关资源
    最近更新 更多