Laravel wyszukiwanie

Odpowiedz Nowy wątek
2020-05-12 20:25

Rejestracja: 3 lata temu

Ostatnio: 8 godzin temu

0

witam

mam mały projekcik własnego CRUD plus system autoryzacji. Tabela z różnymi produktami. Chciałem do tego dopisać wyszukiwanie (search).
Niestety po dopisaniu Laravel wywala mi ciągle błąd > InvalidArgumentException
View [index] not found. >

Podejrzewam że jest jakiś bład w kontrolerze.
Mój kontroler: ProductsController.php
linijka public function search(Request $request) dopisane wyszukiwanie nie mam pojecia czy to jest poprawnie?? Nazwy tabeli i kolum raczej tak.


<?php

namespace App\Http\Controllers;

use App\Product;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;

class ProductController extends Controller
{
    public function __construct() {
        $this->middleware('auth')->except(['index', 'show']);
    }
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        $products = Product::latest()->paginate(10);

        return view('products.index',compact('products'))
            ->with('i', (request()->input('page', 1) - 1) * 10);
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        return view('products.create');
    }

    public function search(Request $request)
    {
        $search = $request->get('search');
        $posts = DB::table('products')->where('name', 'like', '%' .$search. '%' )->paginate(10);
        return view('index', ['products' => $posts]); 
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        $request->validate([
            'name' => 'required',
            'detail' => 'required',
            'armor' => 'required',
            'gun'   => 'required',
            'engine' => 'required',
        ]);

        Product::create($request->all());

        return redirect()->route('products.index')
                        ->with('success','Product created successfully.');
    }

    /**
     * Display the specified resource.
     *
     * @param  \App\Product  $product
     * @return \Illuminate\Http\Response
     */
    public function show(Product $product)
    {
        return view('products.show',compact('product'));
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  \App\Product  $product
     * @return \Illuminate\Http\Response
     */
    public function edit(Product $product)
    {
        return view('products.edit',compact('product'));
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \App\Product  $product
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, Product $product)
    {
        $request->validate([
            'name' => 'required',
            'detail' => 'required',
            'armor' => 'required',
            'gun'   => 'required',
            'engine' => 'required',
        ]);

        $product->update($request->all());

        return redirect()->route('products.index')
                        ->with('success','Pozycja zaktualizowana');
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  \App\Product  $product
     * @return \Illuminate\Http\Response
     */
    public function destroy(Product $product)
    {
        $product->delete();

        return redirect()->route('products.index')
                        ->with('success','Pozycja usunięta');
    }
}

Routing web.php

Route::get('/', function () {
    return view('welcome');
});

Route::resource('products','ProductController');
Auth::routes();

Route::get('/search', '[email protected]');
Route::get('/home', '[email protected]')->name('home');

Wie ktos jak to naprawić lub napisac troche inaczej ? Wyszukiwanie w kolumnie name.

Pozostało 580 znaków

2020-05-12 21:12

Rejestracja: 9 lat temu

Ostatnio: 8 godzin temu

Lokalizacja: Grudziądz/Bydgoszcz

1

no podałeś że twój widok dla search to bedzie view/index.blade.php i system ci wyraźnie mówi, że ten plik nie istnieje. Sam index masz skierowany na view/products/index.blade.php więc może o ten widok ci chodzi?


It's All About the Game.

Pozostało 580 znaków

2020-05-13 00:02

Rejestracja: 3 lata temu

Ostatnio: 8 godzin temu

0

zmieniłem widok na view/products/index.blade.php
tak słusznie o ten mi chodzi. niestety wywala mi dalej bład tym razem

$i is undefined
Make the variable optional in the blade template. Replace {{ $i }} with {{ $i ?? '' }}

zmienna $i jest niezdefiniowana. Ale w przypadku CRUD bez search działało normalnie
mój widok:

@ extends('products.layout')

@ section('content')
    <div class="row">
        <div class="col-lg-12 margin-tb">
            <div class="pull-left">
                </br><h2>TABELA - ADMIN PANEL</h2>
            </div>
                <form action="/search" method="get">
                    <div class="input-group">
                        <input type="search" name="search" class="form-control">
                        <span class="input-group-prepend">
                                    <button type="submit" class="btn btn-primary">Search</button>
                                    </span>
                                 </div>
                              </form>

            <div class="pull-right">
                <a class="btn btn-success" href="{{ route('products.create') }}"> Dodaj nowy produkt</a>
                @auth
                <form class="d-inline-block float-right" action="{{ route('logout') }}" method="post">
                @csrf
                <button class="btn btn-danger">Wyloguj</button>
                </form>
                @else
                <a href="{{route('login') }}" class="btn btn-secondary">Login</a>
                @endauth
            </div>
        </div>
    </div>

    @if ($message = Session::get('success'))
        <div class="alert alert-success">
            <p>{{ $message }}</p>
        </div>
    @endif

    <table class="table table-bordered">
        <tr>
            <th>ID</th>
            <th>Nazwa</th>
            <th>Opis</th>
            <th>Pancerz</th>
            <th>Działo</th>
            <th>Silnik</th>
            <th width="280px">MENU</th>
        </tr>
        @foreach ($products as $product)
        <tr>
            <td>{{ ++$i }}</td>
            <td>{{ $product->name }}</td>
            <td>{{ $product->detail }}</td>
            <td>{{ $product->armor }}</td>
            <td>{{ $product->gun }}</td>
            <td>{{ $product->engine }}</td>
            <td>
                <form action="{{ route('products.destroy',$product->id) }}" method="POST">

                    <a class="btn btn-info" href="{{ route('products.show',$product->id) }}">Pokaż</a>

                    <a class="btn btn-primary" href="{{ route('products.edit',$product->id) }}">Edytuj</a>

                    @csrf
                    @method('DELETE')

                    <button type="submit" class="btn btn-danger">Skasuj</button>
                </form>
            </td>
        </tr>
        @endforeach
    </table>

    {!! $products->links() !!}

@endsection

a w kontrolerze mam teraz tak:

public function search(Request $request)
    {
        $search = $request->get('search');
        $posts = DB::table('products')->where('name', 'like', '%' .$search. '%' )->paginate(10);
        return view('products/index', ['products' => $posts]); 
    }
edytowany 3x, ostatnio: Łapa_krk, 2020-05-13 00:08

Pozostało 580 znaków

2020-05-13 00:37

Rejestracja: 9 lat temu

Ostatnio: 8 godzin temu

Lokalizacja: Grudziądz/Bydgoszcz

0

no pewnie że jest niezdefiniowana, przecież w metodzie index przesyłasz tam tę zmienną (za pomocą with() ) a w search już nie więc jak mogła by być skoro jej nie podajesz do widoku?


It's All About the Game.
edytowany 1x, ostatnio: mr_jaro, 2020-05-13 00:38

Pozostało 580 znaków

2020-05-13 00:38

Rejestracja: 3 lata temu

Ostatnio: 8 godzin temu

0

jak usuwam ta zmienną od ID

 <td>{{ ++$i ?? '' ?? ''}}</td>

wtedy wyszukiwanie działa. Tylko jak teraz poprawić żeby wyszukiwanie działało razem z ID pokazywało.

Pozostało 580 znaków

2020-05-13 00:39

Rejestracja: 9 lat temu

Ostatnio: 8 godzin temu

Lokalizacja: Grudziądz/Bydgoszcz

1

to nie jest żadne id to jest $i które przesyłasz sam do widoku.


It's All About the Game.

Pozostało 580 znaków

2020-05-13 00:50

Rejestracja: 3 lata temu

Ostatnio: 8 godzin temu

0

ok rozumiem to teraz pytanie jak prawidłowo dopisać w funkcji wyszukiwania w kontrolerze ->with ze zmienna $i ? Chyba zbytnio nie rozumiem tego zapisu....

Pozostało 580 znaków

2020-05-13 00:54

Rejestracja: 9 lat temu

Ostatnio: 8 godzin temu

Lokalizacja: Grudziądz/Bydgoszcz

1

1) with niczym się nie rózni od przekazania zmiennej do templatki w arrayu. to po prostu inny sposób
2) twoje $i to nie id tylko numer wiersza zgodny z kolejnością sortowania
3) możesz zwyczajnie dodać identyczny kod co w index, przecież w searchu tak samo masz paginację.


It's All About the Game.

Pozostało 580 znaków

2020-05-13 01:04

Rejestracja: 3 lata temu

Ostatnio: 8 godzin temu

0

dobra działa !!! :) miałem też literówkę dlatego nie działało dzięki wielkie

Pozostało 580 znaków

2020-05-28 21:24

Rejestracja: 3 lata temu

Ostatnio: 8 godzin temu

0

a wie ktoś jak dorobić do tego CRUD sortowanie w tabeli? np alfabetyczne albo po wartości. Laravel ma jakąś wbudowaną funkcje do tego ? Sortby? tylko zastanawiam się jak bedzie wyglądał zapis w kontrolerze

Mam takie coś w Yii2 od ręki :) - Bartosz Wójcik 2020-05-30 15:32
przetestuje kiedyś Yii2 jescze nigdy w tym nic nie robiłem. Słyszałem że dobry ale zastanawiam się dlaczego tak mało popularny - Łapa_krk 2020-05-30 15:36
Ja się cały czas zastanawiam czemu Laravel jest tak popularny, próbowałem na tym migrować jeden prosty serwis, ale ilość ręcznej roboty jaką mam zautomatyzowaną w Yii2 dzięki wizualnym narzędziom jak Gii do tworzenia modeli na podstawie tabel baz danych, kontrolerów na podstawie modelów, modułów (a nie siedzenie w konsoli cały czas w konsoli w Laravelu) tylko sprawiło, że jednak sobie zostanę przy Yii2. Wizualny debugger wbudowany w wersję developerską serwisu też zaoszczędza kupę czasu. Może kiedyś. - Bartosz Wójcik 2020-05-30 16:28

Pozostało 580 znaków

2020-05-28 22:09

Rejestracja: 9 lat temu

Ostatnio: 8 godzin temu

Lokalizacja: Grudziądz/Bydgoszcz

1

eeee? serio? Dokumentacja jest od czegoś... https://laravel.com/docs/7.x/[...]ing-grouping-limit-and-offset


It's All About the Game.
tak czytałem ją tylko chyba nie zrozumiałem... - Łapa_krk 2020-05-29 13:05
Dokumentacja jest do hasioka :) - Bartosz Wójcik 2020-05-30 16:39
dzięki już myślałem że tylko ja mam problem z czytaniem - Łapa_krk 2020-05-30 16:53
@Łapa_krk: no jeśli z tą sobie nie radzisz to będzie tylko gorzej @Bartosz Wójcik taaa, 90% docu z jakimi mam do czynienia są kilka razy gorsze :) - mr_jaro 2020-05-30 16:57
Ostatnio najbardziej lubię dokumentację z Mozilli do API rozszerzeń. Zawsze mnie np. dziwił brak przykładów w WinAPI na MSDN. Przykład musi być ;) - Bartosz Wójcik 2020-05-30 18:10

Pozostało 580 znaków

Odpowiedz

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0