我想实现以下目标:
设备>控制器@设备
devices / {id}>控制器@设备
Laravel有可能吗?我正在尝试使用Android应用程序ImperiHome映射一个domotic box,他们希望我有相同的设备列表路径和任何设备操作。
到目前为止,我已经尝试过这个:
Route::get('devices/{deviceId}/action/{actionName}/{actionParam?}', 'DomoticzController@devices');
Route::get('devices', 'DomoticzController@devices');
但是当我调用devices / id url
时,我无法检索参数答案 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¶m={$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严格错误。
您不能将没有参数的路由重定向到需要参数的控制器操作。另一方面,您可以将带有参数的路径重定向到带有可选参数的控制器操作(这并不意味着您的路由参数必须是可选的)。