Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 10.01.2015 15:01:08

Андрей91

Поиск по сайту

Здравствуйте! Делаю уроки по Джеффри Уэйю, Custom Facades.

Мне нужен поиск на странице 404.

Я новичок в ларавел. По урокам создал сайт, все настроил. Осталось реализовать поиск, и мой проект в Интернете! Но на поиске я и сломался((

Если пишешь в адресной строке posts?q=  и поисковый запрос, то происходит вывод результатов. То, что нужно. Но если пишешь запрос в форме, то он передает его в адресную строку и вывода результатов не происходит. Помогите, пожалуйста, новичку доработать код, очень нужно! У Джеффри Уэйя этот урок не закончен, предполагается, что люди сами это сделают. Понимаю, что нужно изучить вначале php получше... и потом только браться за ларавел...

Если кто-нибудь способен доработать, помогите пожалуйста!!!

код такой:                     

             Форма:

{{ Form::open(['method' => 'GET']) }}
    {{Form::input('search', 'q', null, ['placeholder' => 'Поиск...'])}}
{{ Form::close() }}


           Маршрут routes.php

Route::get('posts', 'PostsController@index');
Route::get('search/{query}', function($query)
{   
    return Search::acme($query);
});


         Контроллер PostsController.php

class PostsController extends BaseController {

    public function index()
    {
        if($search = Request::get('q'))       
        {
            $posts = Search::posts($search);
        }

        else
        {
            $posts = Post::all();
        }

        return View::make('posts.index', compact('posts'));
    }

}

                       Модель Post.php

class Post extends Eloquent {

    public function scopeSearch($query, $search)
    {
        return $query->where(function($query) use ($search)
            {
                $query->where('title', 'LIKE', "%$search%")
                      ->orWhere('body', 'LIKE', "%$search%");
            });
    }
   
}


                   Фасад Acme/Facades/Search.php

<?php namespace Acme\Facades;

use Illuminate\Support\Facades\Facade;

class Search extends Facade {

    protected static function getFacadeAccessor()
    {
        return 'search';
    }
}


                  Acme/Search/Search.php

<?php namespace Acme\Search;

use Illuminate\Support\Collection;
use Post;

class Search {

    public function posts($search)
    {
        return Post::search($search)->get();
    }
   
    public function acme()
    {
        return new Collection(['all', 'search' , 'results']);//temporary
    }
   
}


                Acme/Search/SearchServiceProvider.php

<?php namespace Acme\Search;

use Illuminate\Support\ServiceProvider;

class SearchServiceProvider extends ServiceProvider {

    public function register()
    {
        $this->app->bind('search', 'Acme\Search\Search');
    }
}


               Вывод результатов index.blade.php

@extends('layouts.default')

@section('content')
@if ($posts->count())
@foreach($posts as $post)
        <h2>{{ $post->title }}
        <p>{{ $post->body }}</p>
   
@endforeach

@else
<p>К сожалению, поиск не дал результатов.</p>

Подвал раздела