すべての 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 エラーが発生します。どこが間違っているのか、どのコードを追加または編集する必要があるのか教えてください。