function testGenerate() { $context = RequestContext::create(); $context->setHost('m.domain.com'); $router = RouterFactory::create($context); $routeBuilder = $router->getRouteBuilder(); $routeBuilder->add('/path', ''); $routeBuilder->http('/users/{id}', ['name' => 'home.dash', 'action' => 'UsersController@dashboard'])->setRequirements(['id' => '\\d+', 'subdomain' => 'm'])->setHost('{subdomain}.domain.com')->setDefaults(['subdomain' => 'm']); $routeBuilder->prefix('user', function (RouteBuilder $routeBuilder) { $routeBuilder->http('/messages', 'MessagesController@index'); $routeBuilder->http('/messages/{id}', 'MessagesController@show'); $routeBuilder->prefix('me', function (RouteBuilder $routeBuilder) { $routeBuilder->http('/account', 'UsersController@me'); }); }); $routeBuilder->prefix('admin', function (RouteBuilder $routeBuilder) { $routeBuilder->http('/dashboard/', 'HomeController@index'); }); $this->assertEquals('http://www.domain.com/users/100', $router->generateByName('home.dash', ['subdomain' => 'www', 'id' => 100], true)); $this->assertEquals('http://m.domain.com/user/messages/100', $router->generateByAction('MessagesController@show', ['subdomain' => 'www', 'id' => 100], true)); $this->assertEquals('/user/me/account', $router->generateByAction('UsersController@me')); $this->assertEquals('/admin/dashboard', $router->generateByAction('HomeController@index')); }
use Slince\Di\Container; use Slince\Routing\RouterFactory; use Slince\View\ServiceFactory; use Slince\Application\Kernel; use Slince\Di\Definition; use Monolog\Logger; use Monolog\Handler\StreamHandler; return function (Container $container, Kernel $kernel) { //核心组件 // config $container->alias('config', '\\Slince\\Config\\Config'); // dispatcher $container->alias('dispatcher', '\\Slince\\Event\\Dispatcher'); // kernel cache $container->alias('kernelCache', '\\Slince\\Cache\\ArrayCache'); // router $container->share('router', function () { return RouterFactory::create(); }); $container->share('view', function () { $viewManager = ServiceFactory::get('native'); $viewManager->registerHelperClasses(['asset' => '\\Slince\\Application\\Helper\\AssetHelper', 'url' => '\\Slince\\Application\\Helper\\UrlHelper']); return $viewManager; }); $container->share('log', function () use($kernel) { $handler = new StreamHandler($kernel->getLogPath() . '/app.log'); return new Logger('app', [$handler]); }); $container->setDefinition('cache', new Definition('\\Slince\\Cache\\FileCache', [$kernel->getRootPath() . 'tmp/cache']), true); };