【问题标题】:When does the show method perform?show 方法什么时候执行?
【发布时间】:2019-06-16 12:29:21
【问题描述】:

我有一个名为 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

看下图:

当我点击帖子 1 时,为什么 laravel 会运行 show 方法(如图所示)?
这是否意味着每次我们单击链接时, show 方法都会起作用?

【问题讨论】:

    标签: php laravel function methods controller


    【解决方案1】:

    有一个路由文件连接 show 方法和 PostController 控制器。路由用相应的方法触发控制器。点击post 1会得到一个URL路径posts/id,这个路径表示后面的路由,路由触发方法和控制器

    routes/web.php文件中查找路由文件

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

    【讨论】:

      【解决方案2】:

      我假设您在 routes/web.php 中创建了一个资源路由,如下所示:

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

      当您执行GET 请求并提供id 作为第二个url 段时,这将被路由到PostsController@show 方法。

      您可以了解更多关于资源路由/控制器here

      【讨论】:

        【解决方案3】:

        当我点击帖子 1(如图所示)时,为什么 laravel 会运行 show 方法?

        因为链接的 href 中的 url 模式与 show 路由的模式匹配。

        这是否意味着每次我们点击一​​个链接时,show 方法都会起作用?

        没有。 show 路由仅在您的链接与您的 routes/web.php 文件中的 show 模式匹配时使用。要使用不同的路由,请使用不同的 url。例如,如果您从以下位置更改您的网址:

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

        到这里:

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

        然后将改为遵循edit 路线。


        为什么:

        这是您正在谈论的链接的代码:

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

        编队/posts/$idroutes/web.phpshow 路由的默认编队。

        在您的 routes/web.php 文件中,您可以:

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

        或:

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

        Route::resource(在本例中与“帖子”一起使用时)是以下的简写:

        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 中,并且与您在 posts.index 中提供的 url 模式匹配。

        【讨论】:

        • 彻底解决了!非常感谢您简单而完美的回答
        猜你喜欢
        • 1970-01-01
        • 2018-04-29
        • 2012-10-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-20
        • 2016-01-07
        相关资源
        最近更新 更多