Rest Laravel 4列表和详细路线

Rest Laravel 4列表和详细路线,rest,laravel-4,routing,Rest,Laravel 4,Routing,我希望实现以下目标: 设备>Controller@devices 设备/{id}>Controller@devices 拉威尔能做到这一点吗?我正在尝试用android应用程序映射一个domotic box,他们希望我对设备列表和任何设备操作都有相同的路径 到目前为止,我已经尝试过: Route::get('devices/{deviceId}/action/{actionName}/{actionParam?}', 'DomoticzController@devices'); Route::g

我希望实现以下目标:

设备>Controller@devices

设备/{id}>Controller@devices

拉威尔能做到这一点吗?我正在尝试用android应用程序映射一个domotic box,他们希望我对设备列表和任何设备操作都有相同的路径

到目前为止,我已经尝试过:

Route::get('devices/{deviceId}/action/{actionName}/{actionParam?}', 'DomoticzController@devices');
Route::get('devices', 'DomoticzController@devices');

但是当我调用devices/id url时,我无法检索参数,因此为了解决php严格标准错误,我将路由拆分为两种方法,如下所示:

routes.php

DomoticzController.php


也许有更好的方法来解决这个问题,我很高兴听到这个消息。

如果您让两条路线使用相同的控制器动作,我认为您需要在控制器中设置可选参数

尝试这个公共函数设备$deviceId=null、$actionName=null、$actionParam=null,看看是否仍然出现PHP严格错误


不能将没有参数的路由重定向到需要参数的控制器操作。另一方面,您可以将带有参数的路由重定向到带有可选参数的控制器操作。这并不意味着您的路由参数必须是可选的。

这应该可以工作,您如何尝试检索参数?尝试翻转两个路由的顺序,当我过去做过类似的事情时,接受参数的路由总是在不接受参数的路由之后。好吧,我找到了一种方法使其工作,问题是我无法将两个路由重定向到同一个方法,所以我只使用了两种方法&设备&你可以将多个路由重定向到一个方法。如果你对你的问题展开讨论,也许有人能帮助你。解释当您尝试使用id访问路由时会发生什么是一个好的开始,发布您的设备方法也是一个好的开始。因此,我认为问题在于,第一个路由需要deviceId&actionName参数,而第二个路由没有参数,这导致我对缺少的arguments产生了一个php严格错误是的,我是这么想的,但是我有两个方法,因为第二个方法必须有前两个参数,并且在您的示例中,我可以轻松地调用它,而无需任何参数
Route::get('devices/{deviceId}/action/{actionName}/{actionParam?}', 'DomoticzController@device');
Route::get('devices', 'DomoticzController@devices');
Route::get('rooms', 'DomoticzController@rooms');
//Route::get('action_ret', 'DomoticzController@action_ret');
Route::get('system', 'DomoticzController@system');
Route::get('/', 'DomoticzController@system');
    /**
 * Call for an action on the device identified by $deviceId.
 * @return string Json formated action status.
 */
public function device($deviceId, $actionName, $actionParam = null)
{
    $client = $this->getClient();
    $request = $client->getClient()->createRequest('GET', get_url("json.htm?type=command&param={$actionName}&idx={$deviceId}}&switchcmd=$actionParam"));
    $response = $request->send();
    $input = $response->json();

    // convert to app format
    $output = array('success' => ('OK' === $input['status'] ? true : false), 'errormsg' => ('ERR' === $input['status'] ? 'An error occured' : ''));

    return Response::json($output);
}

/**
 * Retrieve the list of the available devices.
 * @return string Json formatted devices list.
 */
public function devices()
{
    $client = $this->getClient();
    $request = $client->getClient()->createRequest('GET', get_url('json.htm?type=devices&used=true'));
    $response = $request->send();
    $input = $response->json();

    // convert to app format
    $output = new stdClass();
    $output->devices = array();

    foreach ($input['result'] as $device) {
        $output->devices[] = array (
            'id' => $device['idx'],
            'name' => $device['Name'],
            'type' => 'DevSwitch',
            'room' => null,
            'params' => array(),
            );
    }

    return Response::json($output);
}