すべての zend コーダーにこんにちは。私は zend の初心者で、DB を介してページを管理するためのコードを作成しています。これらのページの URL を次のように使用したい:
www.domainname.com/about-us
www.domainname.com/contact-us ...
テーブル名は「cms_page」で、属性は次のとおりです。
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(255) NOT NULL,
`page_key` varchar(255) NOT NULL,
`content` longtext NOT NULL,
`added_on` datetime NOT NULL,
私はこれについて研究開発を行いました。コードは次のとおりです。
// module.config.php 内 'ナビゲーション' => 配列( 'デフォルト' => 配列( 'アカウント' => 配列( 'ラベル' => 'アカウント', 'ルート' => 'ノード', 'params' => 配列( 'id' => '2', )、 'ページ' => 配列( 'ホーム' => 配列( 'ラベル' => 'ダッシュボード', 'ルート' => 'ノード', 'params' => 配列( 'id' => '1', 'リンク' => '/テスト' )、 )、 'ログイン' => 配列( 'ラベル' => 'サインイン', 'ルート' => 'ノード', 'params' => 配列( 'id' => '5', 'link' => '/about-us' )、 )、 'ログアウト' => 配列( 'ラベル' => 'サインアウト', 'ルート' => 'ノード', 'params' => 配列( 'id' => '3', )、 )、 )、 )、 )、 )、 'ルーター' => 配列( 'ルート' => 配列( 'ホーム' => 配列( 'type' => 'Zend\Mvc\Router\Http\Literal', 'オプション' => 配列( 'ルート' => '/', 'デフォルト' => 配列( 'コントローラー' => 'アプリケーション\コントローラー\インデックス', 'アクション' => 'インデックス', )、 )、 )、 'ノード' => 配列( 'type' => 'Application\Router\Alias', 'オプション' => 配列( 'ルート' => '/node[/:id]', '制約' => 配列( 'id' => '[0-9]+' )、 'デフォルト' => 配列( '__NAMESPACE__' => 'アプリケーション\コントローラー', 'コントローラー' => 'インデックス', 'アクション' => 'インデックス', 'id' => '0' )、 )、 'may_terminate' => true, )、 )、 )、
// Module.php 内 パブリック関数 onBootstrap(MvcEvent $e) { $app = $e->getApplication(); $sm = $app->getServiceManager(); $sm->get('翻訳者'); $sm->get('viewhelpermanager')->setFactory('controllerName', function($sm) use ($e) { $viewHelper = new View\Helper\ControllerName($e->getRouteMatch()); $viewHelper を返します。 }); $eventManager = $e->getApplication()->getEventManager(); $moduleRouteListener = 新しい ModuleRouteListener(); $moduleRouteListener->attach($eventManager); $sm->setFactory('Navigation', 'Zend\Navigation\Service\DefaultNavigationFactory', true); $alias = $sm->get('Application\Router\Alias'); $nav = $sm->get('ナビゲーション'); $alias->setNavigation($nav); } パブリック関数 getServiceConfig() { 配列を返します( 'factories' => 配列( 'Application\Router\Alias' => function($sm) { $alias = new \Application\Router\Alias('/node[/:id]'); $エイリアスを返します。 }、 ) ); }
// Application\src\Application\Router 名前空間 Application\Router; Traversable を使用します。 Zend\Mvc\Router\Exception を使用します。 Zend\Stdlib\ArrayUtils を使用します。 Zend\Stdlib\RequestInterface をリクエストとして使用します。 Zend\Mvc\Router\Http を使用します。 Zend\Mvc\Router\Http\Segment をセグメントとして使用します。 クラス エイリアスはセグメントを拡張します { プライベート静的 $_navigation = null; public function match(Request $request, $pathOffset = null) { $uri = $request->getUri(); $path = $uri->getPath(); $items = self::$_navigation->findAllBy('ルート', 'ノード'); $params = null; if($items != null){ $t = sizeof($items); for ($i=0; $i getParams(); if (isset($params['link']) && $params['link']==$path){ echo $uri->setPath('/'.$item->getRoute().'/'.$params['id']); $request->setUri($uri); 壊す; } } } 親を返します::一致($request、$pathOffset); } パブリック関数 setNavigation($navigation){ self::$_navigation = $navigation; } 保護された関数 buildPath(配列 $parts、配列 $mergedParams、$isOptional、$hasChild、配列 $options) { if(isset($mergedParams['link'])){ $mergedParams['link']; を返します。 } return parent::buildPath($parts, $mergedParams, $isOptional, $hasChild, $options = array()); } }
この URL www.domainname.com/about-us をブラウザで実行すると、404 エラーが発生します。どこが間違っているのか、どのコードを追加または編集する必要があるのか教えてください。