如何在 Laravel 中打开到模态窗口的路线

Posted

技术标签:

【中文标题】如何在 Laravel 中打开到模态窗口的路线【英文标题】:How to open a route to a modal window in Laravel 【发布时间】:2021-08-22 04:04:38 【问题描述】:

如何在模态窗口中打开来自其他表的主题代码信息?

在我的控制器中我有这个

public function viewSubjects($subject)
        if(Auth::guard('front')->check())
            $user = Auth::guard('front')->user()->username;
        else
            $user = 0;
        
        $student = Student::where('stud_no', $user)->first();
        $student = json_decode(json_encode($student));
              $subjects = Subject::where('subj_code', $subject)->get();
        return view('front.users.viewmySubjects')->with(compact('student','subjects','subject'));
    

我有这把刀

  <table class="table table-hover">
                            <thead>
                                <tr style="color:#1a0dab;font-weight:BOLD">
                                <th scope="col">SUBJECT CODE</th>
                                <th scope="col">TIME</th>
                                <th scope="col">DAYS</th>
                                <th scope="col">ROOM</th>
                                <th scope="col">INSTRUCTOR</th>
                                
                                </tr>
                            </thead>
                            <tbody>
                            @foreach($grades as $grade)
                                <tr>
                                <td style="text-align: left;"><a href=" url('/mysubjects/'. $grade->subj_code)"> $grade->subj_code</td>
                  

                                <td> $grade->time </td>
                                <td style="font-weight:bold;"> $grade->days </td>
                                <td> $grade->room </td>
                                <td style="color:#ff0000;"> $grade->inst_name</td>
                                </tr>
                                @endforeach

                                
                            </tbody>
            </table>

我可以在其他刀片上打开它



              <table class="table ">
                            <thead>
                                <tr >
                                <th scope="col" style="color:#1a0dab;">SUBJECT CODE</th>
                                <th scope="col" style="color:#1a0dab"> DESCRIPTION</th>
                                <th scope="col" style="color:#1a0dab">UNITS</th>
                                </tr>
                            </thead>
                            <tbody>
                            @foreach($subjects as $subject)
                                <tr>
                                 <td style="text-align: left;"> $subject->subj_code</td>
                                <td> $subject->subj_desc </td>
                                <td> $subject->subj_units </td>
                              
                                </tr>
                                @endforeach
                            </tbody>
                </table>

但是我想在模态窗口上看到它,这样每当我点击主题代码时,它就会打开模态窗口并看到信息。

我在下面有这条路线。

Route::get('/mysubjects/subject', 'UsersController@viewSubjects');

这是我到目前为止所做的,我完全一团糟..

  <table class="table table-hover">
                            <thead>
                                <tr style="color:#1a0dab;font-weight:BOLD">
                                <th scope="col">SUBJECT CODE</th>
                                <th scope="col">TIME</th>
                                <th scope="col">DAYS</th>
                                <th scope="col">ROOM</th>
                                <th scope="col">INSTRUCTOR</th>
                                
                                </tr>
                            </thead>
                            <tbody>
                            @foreach($grades as $grade)
                                <tr>
                                <td style="text-align: left;"><a href="#myModal url('/mysubjects/'. $grade->subj_code)"  data-toggle="modal"> $grade->subj_code</td>
                  
                                <!-- Modal -->
                                          <div class="modal fade" id="myModal url('/mysubjects/'. $grade->subj_code)" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
                                            <div class="modal-dialog" role="document">
                                              <div class="modal-content">
                                                <div class="modal-header">
                                                  <h5 class="modal-title" id="exampleModalLabel">Modal title</h5>
                                                  <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                                                    <span aria-hidden="true">&times;</span>
                                                  </button>
                                                </div>
                                                <div class="modal-body">
                                                  
                                                    
                                                <table class="table ">
                                                              <thead>
                                                                  <tr >
                                                                  <th scope="col" style="color:#1a0dab;">SUBJECT CODE</th>
                                                                  <th scope="col" style="color:#1a0dab"> DESCRIPTION</th>
                                                                  <th scope="col" style="color:#1a0dab">UNITS</th>
                                                                  </tr>
                                                              </thead>
                                                              <tbody>
                                                              @foreach($subjects as $subject)
                                                                  <tr>
                                                                  <td style="text-align: left;"> $subject->subj_code</td>
                                                                  <td> $subject->subj_desc </td>
                                                                  <td> $subject->subj_units </td>
                                                                
                                                                  </tr>
                                                                  @endforeach
                                                              </tbody>
                                                  </table>

                                                </div>
                                                <div class="modal-footer">
                                                  <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
                                                  <button type="button" class="btn btn-primary">Save changes</button>
                                                </div>
                                              </div>
                                            </div>
                                          </div>
                                <td> $grade->time </td>
                                <td style="font-weight:bold;"> $grade->days </td>
                                <td> $grade->room </td>
                                <td style="color:#ff0000;"> $grade->inst_name</td>
                                </tr>
                                @endforeach

                                
                            </tbody>
            </table>

我可以为这个使用 javascript/ajax 吗? 谢谢。。

【问题讨论】:

是的,你可以使用 javascript/ajax 这个 Espresso 你能提供一些例子吗? 【参考方案1】:

所以我认为最简单的解决方案是制作刀片组件:

php artisan make:component AjaxModal

您的组件ajax-modal.blade.php 可能类似于:

<!-- Button trigger modal -->
<button type="button" class="btn btn-primary btn-lg" data-toggle="modal" data-target="#$id">
    $slot
</button>

<!-- Modal -->
<div class="modal fade" id="$id" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
    <div class="modal-dialog" role="document">
        <div class="modal-content" id="$id-content">

        </div>
    </div>
</div>

<script>
    $(function () 
       $('#$id').on('show.bs.modal', function () 
           $('#$id-content').addClass('loading');
            $.ajax(
                url: @json($url),
                success: function (data) 
                    $('#$id-content').append($(data));
                ,
                error: function () 
                    $('#$id-content').append($('<p>Error</p>'));
                ,
                complete: function () 
                    $('#$id-content').removeClass('loading');
                
            );
       );
    );
</script>

您的组件类将是:

<?php

namespace App\View\Components;

use Illuminate\View\Component;

class AjaxModal extends Component

    public string $id;
    public string $url;

    /**
     * Create a new component instance.
     *
     * @return void
     */
    public function __construct($url, $id)
    
        $this->id = $id;
        $this->url = $url;
    

    /**
     * Get the view / contents that represent the component.
     *
     * @return \Illuminate\Contracts\View\View|string
     */
    public function render()
    
        return view('components.ajax-modal');
    

你的主视图可以是这样的:

@foreach($grades as $grade)
   <tr>
      <td style="text-align: left;">
          @php 
             $modalUrl = url('/mysubjects/'. $grade->subj_code);
             $id = 'grade-'.$grade->id;
          @endphp
          <x-ajax-modal :url="$modalUrl" :id="$id"> 
              $grade->subj_code
          </x-ajax-modal>
       </td>
   </tr>
@endforeach
                  

请记住,您从控制器返回的任何成绩都将放在modal-content 中,因此结果中应该包含modal-headermodal-body

还将“myModalLabel”替换为您将在结果中返回的 id,并将包含屏幕阅读器要从模式中读取的内容

编辑:

对于 7 个组件之前的 Laravel 版本,只需创建一个 .blade.php 文件即可声明(在这种情况下,它与上述相同)。

但是使用它们的方法是:

@php 
$parameters = [ 
    'url' => url('/mysubjects/'. $grade->subj_code),
    'id' => 'grade-'.$grade->id 
];
@endphp
@component('ajax-modal', $parameters)
    Trigger
@endcomponent

不幸的是,以前版本的 laravel 不支持组件的支持类或更简单的语法。然而,在这个特殊的用例中,组件类并没有真正做任何事情,所以你可能没有它。

【讨论】:

HI 当我运行 php artisan make:component AjaxModal 命令“make:component”未定义。如何解决这个问题? ty @ArgieDioquino 这个命令应该在 Laravel 7+ 中可用。如果您使用的是早期版本,则定义组件的方式会有所不同 我不了解组件。但是,如果我要在单个刀片文件中创建一个组件,那么内容会是什么。它只是 ajax-modal 刀片还是我需要添加更多内容,因为组件类在较低的类中不起作用,最后我应该把``` @php $parameters = [ 'url' => url( '/mysubjects/'.$grade->subj_code), 'id' => 'grade-'.$grade->id ]; @endphp @component('ajax-modal', $parameters) 触发 @endcomponent 谢谢... @ArgieDioquino ajax-modal 的内容就足够了,该代码将替换 @php....@endphp&lt;x-ajax-modal.. 部分

以上是关于如何在 Laravel 中打开到模态窗口的路线的主要内容,如果未能解决你的问题,请参考以下文章

自我终止如何在laravel 8中使用模态打开每个帖子

在 Laravel 中单击模态后如何获取标签的 data-href 值

从 iframe 打开一个模态窗口到父窗口

如何在模态窗口中放置 Joomla 2.5 后端视图

统计图钻取的明细报表在非模态窗口中显示

统计图钻取的明细报表在非模态窗口中显示