【问题标题】:Laravel Routing and Controller for Search用于搜索的 Laravel 路由和控制器
【发布时间】:2015-02-22 20:49:14
【问题描述】:

我正在构建我的第一个基本的 laravel 网络应用程序,在学习了一些教程之后,这是我自己修补的第一个应用程序。我在路由到控制器然后获取正确的 url 时遇到了一些麻烦。

理想情况下,此时我应该只有两条路线//{user}。在主页上,您可以通过表单搜索用户,该表单应将您带到/{user}

路线(我有三个原因,我仍在努力让它工作,我想我需要一个 POST):

Route::get('/', 'HomeController@index');
Route::get('/{user}', 'HomeController@student');
Route::post('/', 'HomeController@studentLookUp');

家庭控制器:

public function index()
{
    return View::make('helpdesk');
}

public function student($user) {
    return View::make('selfservice')
        ->with('user', $user);
}

public function studentLookUp() {
    $user = Input::get('ID');

    return View::make('selfservice')
        ->with('user', $user);
}

表格:

{{ Form::open(array('class'=>'navbar-form navbar-left', 'role'=>'search'), array('action' => 'HomeController@student')) }}

  <div class="form-group">
    {{ Form::text('ID', '', array('placeholder'=>'ID', 'class'=>'form-control') ); }}
  </div>

  {{ Form::button('Search', array('class'=>'btn btn-default')) }}  

{{ Form::close() }}

此时我可以从主页('/')搜索,它会带我回到主页,但搜索到的用户是我希望它工作的方式,除了它没有正确的 url homepage.com/username.

任何帮助将不胜感激!

【问题讨论】:

  • 你的意思是Route::get('/{user}', 'HomeController@student'); 不起作用?

标签: php laravel


【解决方案1】:

首先注册一个路由来监听你的搜索请求:

1.搜索路线: 注册搜索路线。

//route search 
Route::get('/search',['uses' => 'SearchController@getSearch','as' => 'search']);

2。搜索视图:- 现在在视图中创建一个搜索表单:-

<form  action="/search" method="get">
<input type="text"  name="q" placeholder="Search.."/>
<button type="submit">Search</button>
</form>

3。搜索控制器:

现在创建 SearchController 来处理您的搜索逻辑。 搜索控制器:

    <?php

    class SearchController extends \BaseController {


        public function getSearch()
        {
            //get keywords input for search
            $keyword=  Input::get('q');

            //search that student in Database
             $students= Student::find($keyword);

            //return display search result to user by using a view
            return View::make('selfservice')->with('student', $students);
        }

    }

现在您必须创建一个视图 selfservice 来显示您的搜索结果。

4.自助服务视图:

@foreach ($students as $key=> $student)
<div>
<a href="{{ URL::route('student.show', ['id' => $student->id]) }}">{{$student->name}}</a>
</div>              
@endforeach

此处将为每个学生的结果创建一个链接。该链接将是链接:-

website.domain/{student}

5.更新学生路线

Route::get('/{student}',['uses' => 'HomeController@student','as' => 'student.show']);

UPDATE更新答案直接获取学生页面


要从搜索重定向到website.domain\{user},请按以下步骤操作:-

1.修改 SearchController

<?php

class SearchController extends \BaseController {


    public function getSearch()
    {
        //get keywords input for search
        $keyword=  Input::get('q');

        //search that student in Database
         $student= Student::find($keyword);

        //redirect directly to student.show route with student detail
        return Redirect::route('student.show', array('student' => $student));
    }

}

2. 现在在 HomeController 中为 Route student.show 添加一个函数 Route::get('/{student}',['uses' =&gt; 'HomeController@student','as' =&gt; 'student.show']);

在 HomeController 中

public function student($student)
{
    //here display student detail
}

【讨论】:

  • 谢谢,这绝对有帮助。此时我可以搜索一个用户,他们会出现,但 url 是homepage.com/search。从 getSearch 控制器获取查询后,有什么方法可以重定向到 homepage.com/username
  • 当显示搜索结果时,那个时候的 URL 将是 website.domain/search?q=keyword 但是在这个 search_result_view 中你会显示所有用户并且这些用户的 URL 将是 website.domain/{user}
  • 先了解流程Homepage=&gt;search=&gt;search_result=&gt;user_page。在搜索和用户视图之间会有一个中间视图search_result。点击sear_result视图中可用的链接后,页面将被重定向到website.domain/{user}
  • 我就是这么想的。反正不用点击搜索结果页面上的链接就自动路由了?
  • 非常感谢您的帮助。做到了,我在 Laravel 中学到了一些我不知道的新技巧!
猜你喜欢
  • 2023-03-27
  • 2017-03-05
  • 1970-01-01
  • 1970-01-01
  • 2017-02-27
  • 1970-01-01
  • 2014-07-20
  • 1970-01-01
相关资源
最近更新 更多