哪个路由在Laravel 5中执行http:// localhost:8000 / my / 8

时间:2016-02-11 17:27:24

标签: php laravel laravel-5

给定资源控制器,在输入http://localhost:8000/my/8时执行哪一个?当我尝试这一切时,我得到的是空白。其他路线如index和create? 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        

2 个答案:

答案 0 :(得分: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将寻找类似于您正在访问的路线。

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

这不会调用createdestroy方法,因为您只是访问网址(GET)。因此,如果您发送创建网页POST的请求,laravel将调用create方法。同样,DELETE会调用destroy

答案 1 :(得分:1)

如果您使用路线Route::resource('my','myController');

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

动作