2014-06-19 172 views
0

我要实现以下目标:Laravel 4列表和详细路线

设备>控制器@设备

设备/(编号)>控制器@设备

这可能与Laravel?我试图用android应用程序ImperiHome映射一个domotic盒子,并且他们希望我有相同的路由设备列表和任何设备操作。

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

Route::get('devices/{deviceId}/action/{actionName}/{actionParam?}', '[email protected]'); 
Route::get('devices', '[email protected]'); 

但我不能检索参数时,我称之为设备/ ID网址

+0

这应该工作,你如何试图检索参数?尝试翻转两条路线的顺序,当我在过去做过类似的事情时,接受参数的路线总是在没有路线的路线之后。 – Jeemusu

+0

好吧,我找到了一种方法使其工作,问题是我无法将两个路由重定向到相同的方法,所以我只使用了2种方法(设备和设备) – kitensei

+0

您可以将多个路由重定向到单个方法。如果你扩展你的问题,有人可能会帮助你。解释当你尝试访问带有id的路由时会发生什么,这将是一个好的开始,所以发布你的'devices'方法。 – Jeemusu

回答

0

好了,解决了PHP的严格标准的错误,我只是分裂路由到两个方法如下:

routes.php文件

Route::get('devices/{deviceId}/action/{actionName}/{actionParam?}', '[email protected]'); 
Route::get('devices', '[email protected]'); 
Route::get('rooms', '[email protected]'); 
//Route::get('action_ret', '[email protected]_ret'); 
Route::get('system', '[email protected]'); 
Route::get('/', '[email protected]'); 

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

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

0

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

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

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

+0

是的,这就是我想,但我宁愿有2种方法,因为第二种方法必须有前2个参数,并且用你的例子,我可以轻松地调用它,而无需任何参数 – kitensei