myiyk / seo-router
Nette 框架的 SEO 路由扩展
dev-master
2017-06-25 19:20 UTC
Requires
- php: >=5.4
- nette/application: ~2.2
- nette/di: ~2.2
- nette/http: ~2.2
Requires (Dev)
- apigen/apigen: ^4.1.2
- nette/bootstrap: >=2.2
- nette/tester: ~1.0
- nette/utils: >=2.2
This package is not auto-updated.
Last update: 2024-09-14 18:47:28 UTC
README
安装
使用 composer composer require myiyk/seo-router:@dev
或者
将源代码复制到 Nette/RobotLoader 或 Composer 可以找到的地方
基本用法
配置 app/config/config.neon
services: - App\Model\SeoRouterSource routerFactory: App\RouterFactory router: @routerFactory::createRouter(@seoRouter.router) extensions: seoRouter: Myiyk\SeoRouter\Extension
路由需要具有 Myiyk/SeoRouter/ISource 接口的数据源
<?php // file: app/model/SeoRouterSource.php namespace App\Model; use Myiyk\SeoRouter\Action; use Myiyk\SeoRouter\ISource; use Nette; class SeoRouterSource extends Nette\Object implements ISource { public function toAction(Nette\Http\Url $url) { $relativeUrl = $url->getRelativeUrl(); if ($relativeUrl == '' || $relativeUrl == 'home') { $presenter = "Homepage:default"; // example presenter $params = array( 'id' => 123, // other parameters ); return new Action($presenter, $params); } else { // or return NULL if result not found return NULL; } } public function toUrl(Action $request) { $presenter = $request->getPresenter(); $action = $request->getAction(); // complete documentation of Nette\Application\Request on // https://api.nette.org/2.3.8/Nette.Application.Request.html if ($presenter == 'Homepage' && $action == 'default') { // or $request->getPresenterAndAction() == 'Homepage:default' return "home"; // means example.com/home } else { // or return NULL if result not found return NULL; } } }
在 app/router/RouterFactory.php 中创建 createRouter 方法
public function createRouter(SeoRouter\Router $seoRouter) { $router = new RouteList; $router[] = $seoRouter; $router[] = new Route('<presenter>/<action>[/<id>]', 'Homepage:default'); return $router; }