如何在silex中安装“子控制器”

时间:2012-10-20 06:42:21

标签: php controller silex

所以我正在研究一个支票簿登记的Silex项目。这个想法是帐户有交易。我正在使用控制器提供程序的方法,所以我正在安装提供程序。我很清楚,我可以为各自的控制器提供商安装/帐户和/交易。但是,由于逻辑事务是帐户的子项,因此我希望实现这种类型的URL结构:

/account/1 =获取帐户ID 1的请求

/account/1/transaction/100 =获取交易ID 100的请求,包括帐户ID 1作为参数

提前致谢。

编辑: 我没有提到我的控制器设置如此:

bootstrap.php中:

$app->mount('/account', new AccountControllerProvider());
$app->mount('/transaction', new TransactionControllerProvider());

AccountControllerProvider.php:

$controllers->put('/', 'Mogaard\Checkbook\Controller\AccountController::createAction')
    ->bind('account_create');
$controllers->get('/{account}', 'Mogaard\Checkbook\Controller\AccountController::displayAction')
    ->convert('account', $accountProvider)
    ->bind('account_display');
$controllers->post('/{account}', 'Mogaard\Checkbook\Controller\AccountController::saveAction')
    ->convert('account', $accountProvider)
    ->bind('account_save');
$controllers->delete('/{account}', 'Mogaard\Checkbook\Controller\AccountController::deleteAction')
    ->convert('account', $accountProvider)
    ->bind('account_delete');

TransactionControllerProvider.php:

$controllers->put('/', 'Mogaard\Checkbook\Controller\TransactionController::createAction')
    ->bind('transaction_create');
$controllers->post('/{transaction}', 'Mogaard\Checkbook\Controller\TransactionController::saveAction')
    ->convert('transaction', $transactionProvider)
    ->bind('transaction_save');
$controllers->delete('/{transaction}', 'Mogaard\Checkbook\Controller\TransactionController::deleteAction')
    ->convert('transaction', $transactionProvider)
    ->bind('transaction_delete');

我希望为/ account / {account} / transaction / {transaction}添加路由,但我不确定如何使用挂载的控制器提供程序并且不将事务控制器职责混合到帐户控制器提供程序中。< / p>

1 个答案:

答案 0 :(得分:4)

正如Igorw所建议的,我只是将其作为答案发布(以防海报没有阅读评论):

我可能不习惯沉默,但你试过吗

$app->get('/account/{accId}/transaction/{transId}'...)

修改

跟踪完该路线后,您可以forward /account/{accId}/transaction/{transId}/transaction/account/$accId/transaction/$transId。它对用户是不可见的,就像.htaccess一样。或者甚至使用.htaccess将这些路线映射到最适合您的路线。