Laravel 5,如何根据收到的URL运行特定方法

时间:2015-10-08 15:49:20

标签: php laravel-5.1 laravel-routing

在我的路线文件中,我有一堆或路由用于测试目的:

/** testing controllers */
Route::get('viewemail', 'TestController@viewemail');
Route::get('restore', 'TestController@restore');
Route::get('sendemail', 'TestController@send_email');
Route::get('socket', 'TestController@socket');
Route::get('colors', 'TestController@colors');
Route::get('view', 'TestController@view_test');
Route::get('numbers', 'TestController@numbers');
Route::get('ncf', 'TestController@ncf');
Route::get('dates', 'TestController@dates');
Route::get('print', 'TestController@printer');
Route::get('{variable}', 'TestController@execute');
/** End of testing controllers */ 

我想删除所有这些路由并简单地使用给定URL的名称来调用并返回方法:

我用这种方式完成了:

Route::get('{variable}', 'TestController@execute');

在我的测试控制器中:

public function execute($method){
    return $this->$method();
}

基本上我想知道如果Laravel有内置的解决方案来执行此操作,我正在阅读文档,但无法找到任何方法来实现此目的。

2 个答案:

答案 0 :(得分:0)

来自官方文档: http://laravel.com/docs/5.1/controllers#implicit-controllers

  

Laravel允许您轻松定义单个路径来处理每个路径   控制器类中的操作。首先,使用the定义路线   Route::controller方法。控制器方法接受两个   参数。第一个是控制器处理的基URI,而   第二个是控制器的类名:

Route::controller('users', 'UserController');
     

接下来,只需向控制器添加方法即可。方法名称应以。开头   他们回复的HTTP动词后跟标题案例版本   URI:

<?php

namespace App\Http\Controllers;

class UserController extends Controller
{
    /**
     * Responds to requests to GET /users
     */
    public function getIndex()
    {
        //
    }

    /**
     * Responds to requests to GET /users/show/1
     */
    public function getShow($id)
    {
        //
    }

    /**
     * Responds to requests to GET /users/admin-profile
     */
    public function getAdminProfile()
    {
        //
    }

    /**
     * Responds to requests to POST /users/profile
     */
    public function postProfile()
    {
        //
    }
}
     

正如您在上面的示例中所看到的,索引方法将响应   控制器处理的根URI,在本例中是用户。

答案 1 :(得分:0)

您可以为要侦听的端点添加路由模式。将它们路由到控制器操作,然后检查请求:

class TestController extends Controller
{
    public function handle(Request $request)
    {
        $method = $request->segment(1); // Gets first segment of URI

        // Do something…
    }
}

在您的路线服务提供商中:

$router->pattern('{variable}', 'foo|bar|qux|baz');