0

我今天确实下载了 Laravel,并且喜欢事物的外观,但我在两件事上苦苦挣扎。

1) 我喜欢控制器分析 url 而不是使用路由的操作方法,它似乎让所有东西都更干净,但可以说我想去

/account/account-year/

我怎样才能为此编写一个动作函数?IE

function action_account-year()...

显然是无效的语法。

2)如果我有

function action_account_year( $year, $month ) { ...

并参观了

/account/account_year/

将显示有关缺少参数的错误,您如何使此用户友好/加载差异页面/显示错误?

4

3 回答 3

8

您必须手动路由连字符版本,例如

Route::get('account/account-year', 'account@account_year');

关于参数,这取决于您的路由方式。您必须接受路由中的参数。如果您使用完整的控制器路由(例如Route::controller('account')),那么该方法将自动传递参数。

如果您是手动路由,则必须捕获参数,

Route::get('account/account-year/(:num)/(:num)', 'account@account_year');

所以参观/account/account-year/1/2就可以了->account_year(1, 2)

希望这可以帮助。

于 2013-01-10T22:01:00.377 回答
4

你也可以想到以下可能

class AccountController extends BaseController {

    public function getIndex()
    {
        //
    }

    public function getAccountYear()
    {
        //
    }

}

现在只需按以下方式在您的路由文件中定义一个 RESTful 控制器

Route::controller('account', 'AccountController');

访问'account/account-year'将自动路由到操作getAccountYear

于 2013-02-15T14:47:33.690 回答
0

我想我会添加这个作为答案,以防其他人正在寻找它:

1)

public function action_account_year($name = false, $place = false ) { 
     if( ... ) { 
             return View::make('page.error' ); 
     }
}

2)

还不是一个可靠的解决方案:

laravel/routing/controller.php,方法“响应”

public function response($method, $parameters = array())
{
    // The developer may mark the controller as being "RESTful" which
    // indicates that the controller actions are prefixed with the
    // HTTP verb they respond to rather than the word "action".

    $method = preg_replace( "#\-+#", "_", $method );            

    if ($this->restful)
    {
        $action = strtolower(Request::method()).'_'.$method;
    }
    else
    {
        $action = "action_{$method}";
    }

    $response = call_user_func_array(array($this, $action), $parameters);

    // If the controller has specified a layout view the response
    // returned by the controller method will be bound to that
    // view and the layout will be considered the response.
    if (is_null($response) and ! is_null($this->layout))
    {
        $response = $this->layout;
    }

    return $response;
}
于 2013-01-10T23:53:55.390 回答