Laravel 4列表和详细路线

时间:2014-06-19 07:51:15

标签: rest laravel-4 routing

我想实现以下目标:

设备>控制器@设备

devices / {id}>控制器@设备

Laravel有可能吗?我正在尝试使用Android应用程序ImperiHome映射一个domotic box,他们希望我有相同的设备列表路径和任何设备操作。

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

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

但是当我调用devices / id url

时,我无法检索参数

2 个答案:

答案 0 :(得分:0)

好的,所以要解决php严格的标准错误我只是将路由拆分为两个方法如下:

<强> routes.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');

<强> DomoticzController.php

    /**
 * 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);
}

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

答案 1 :(得分:0)

如果你让两个路由使用相同的控制器动作,你需要在我认为的控制器中使参数可选。

试试这个public function device($deviceId = null, $actionName = null, $actionParam = null),看看你是否仍然遇到PHP严格错误。

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