Когда работает метод show? - PullRequest
0 голосов
/ 23 января 2019

У меня есть контроллер с именем PostController и модель с именем Post.
Это мой PostController:

use Illuminate\Http\Request;
use App\Post;

class PostsController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        $posts = Post::all();
        return view('posts.index')->with('posts',$posts);
    }

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

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        //
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {

    }

а это мой post.index:

@if (count($posts) > 1)
    @foreach ($posts as $item)

        <div class="card-header mb-3">
            <h3><a href="/posts/{{ $item->id }}">{{ $item->title }}</a></h3>
            <small>Created At {{ $item->created_at }}</small>
        </div>


    @endforeach


@else
    <p>No Post Found</p>
@endif

Посмотрите на изображение ниже:

enter image description here

Почему laravel запускает метод show, когда я нажимаю на сообщение 1 (как на картинке)?
Означает ли это, что каждый раз, когда мы нажимаем на ссылку, метод show будет работать?

Ответы [ 3 ]

0 голосов
/ 23 января 2019

Я предполагаю, что вы создали маршрут ресурса в вашем routes/web.php примерно так:

Route::resource('posts', 'PostsController');

Когда вы выполняете запрос GET и предоставляете id в качестве второго сегмента URL, этонаправляется к методу PostsController@show.

Подробнее о маршрутах / контроллерах ресурсов можно узнать здесь .

0 голосов
/ 23 января 2019

Почему laravel запускает метод show, когда я нажимаю на сообщение 1 (как на картинке)?

Поскольку шаблон URL в вашем href ссылке соответствует шаблону дляshow route.

Означает ли это, что каждый раз, когда мы нажимаем на ссылку, метод show будет работать?

Нет.Маршрут show используется только тогда, когда ваша ссылка соответствует шаблону show в вашем файле routes/web.php.Чтобы использовать другой маршрут, используйте другой URL.Например, если вы измените свой URL-адрес со следующего:

<a href="/posts/{{ $item->id }}"> 

на этот:

<a href="/posts/{{ $item->id }}/edit">

Тогда будет следовать маршрут edit.


Почему:

Это код ссылки, о которой вы говорите:

<h3><a href="/posts/{{ $item->id }}">{{ $item->title }}</a></h3>

Формация /posts/$id - формация по умолчанию для show маршрут в routes/web.php.

В вашем файле routes/web.php имеется:

Route::get('/posts/{$id}', 'PostsController@show');

или:

Route::resource('/posts', 'PostsController');

Route::resource (при использовании с'posts' в этом примере) является сокращением для:

Route::get('/posts', 'PostsController@index');
Route::get('/posts/create', 'PostsController@create');
Route::post('/posts', 'PostsController@store');
Route::get('/posts/{id}', 'PostsController@show');
Route::get('/posts/{id}/edit', 'PostsController@edit');
Route::patch('/posts/{id}', 'PostsController@update');
Route::delete('/posts/{id}', 'PostsController@delete');

Как видите, маршрут show включен в Route::resource и соответствует шаблону URL, который вы указали в posts.index.

0 голосов
/ 23 января 2019

Существует файл маршрута, который соединяет метод show и контроллер PostController. Маршрут запускает контроллер с помощью соответствующих методов. Когда вы нажмете на сообщение 1, вы получите URL-адрес posts / id, этот путь означает следующий маршрут, и маршрут вызывает метод и контроллер

Файл маршрута находится в routes/web.php файле

Route::get('/posts/{id}', 'PostController@show'); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...