【问题标题】:Which Route gets executed in Laravel 5 http://localhost:8000/my/8在 Laravel 5 http://localhost:8000/my/8 中执行哪个路由
【发布时间】:2016-05-22 15:03:00
【问题描述】:

当输入http://localhost:8000/my/8 时,在哪个资源控制器下执行?当我尝试它时,我得到的都是空白。其他路线如索引和创建? Laravel 如何决定在http://localhost:8000/my/8 中执行哪条路由?

Route::resource('my','myController');
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Http\Requests;
use App\Http\Controllers\Controller;

class MyController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        echo 'index';
        //
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        echo '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)
    {
        echo 'show';
        //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        echo 'edit';
        //
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        //
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        //
        echo 'destroy';
    }
}

路线:

    | POST                           | my                                                 | my.store   | App\Http\Controllers\myController@store            |            |
|        | GET|HEAD                       | my                                                 | my.index   | App\Http\Controllers\myController@index            |            |
|        | GET|HEAD                       | my/create                                          | my.create  | App\Http\Controllers\myController@create           |            |
|        | DELETE                         | my/{my}                                            | my.destroy | App\Http\Controllers\myController@destroy          |            |
|        | PUT|PATCH                      | my/{my}                                            | my.update  | App\Http\Controllers\myController@update           |            |
|        | GET|HEAD                       | my/{my}                                            | my.show    | App\Http\Controllers\myController@show             |            |
|        | GET|HEAD                       | my/{my}/edit                                       | my.edit    | App\Http\Controllers\myController@edit        

【问题讨论】:

  • 请发布您的路线。
  • 我更新了包含路线的帖子

标签: php laravel laravel-5


【解决方案1】:

如果你已经设置了路由资源,laravel 应该执行:

Route::get('my/{id}', 'myController@show'); // This will be called. 

public function show($id)
{
        echo 'show';
        //
 }

如果你运行这个命令

php artisan routes:list

您可以看到您的所有应用程序路由和相应的操作。

Laravel 根据请求类型选择合适的 Controller 方法。

如果您正在访问一个页面,它是GET 类型。所以 laravel 会寻找与你正在访问的路线相似的路线。

在这种情况下,您访问的是 URL example.com/my/8。所以 laravel 会寻找类似的路由结构。由于您已经定义了路由资源,laravel 将匹配GET /my/{my}。所以会调用相应的方法。

这不会调用createdestroy 方法,因为您只是在访问url (GET)。所以如果你发送一个创建页面的请求POST,laravel 会调用create 方法。同样DELETE 将调用destroy

【讨论】:

  • 我认为不必定义 Route::get('my/{id}', 'myController@show');因为我有 Route::resource('my','myController');
  • 是的,您不必定义它。我只是向你展示了将执行哪条路线。
  • 我明白了,'show' 现在出现了,但为什么是 'show' 而不是 'edit' 或 'destroy' 呢?
  • 好的。对不起。将 $id 从 show 方法更改为 $my。这将工作
【解决方案2】:

如果你使用路由Route::resource('my','myController');

此网址http://localhost:8000/my/8 必须调用操作 myController@show

【讨论】:

  • 因为destroy mast有DELETE方法,update一定有PUT方法,edit有其他模式
  • my/{my}/edit 模式看起来很奇怪,为什么不是 my/edit/{my}
  • 这是 Laravel 开发者的决定,你可以重新定义。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-02-27
  • 2016-03-28
  • 2021-11-19
  • 2023-02-23
  • 2021-01-11
  • 2016-04-01
  • 1970-01-01
相关资源
最近更新 更多