Теперь я пытаюсь работать с Zend Framework 2 и имею некоторые проблемы с маршрутизацией. У меня есть навигация, как это:Zend Framework 2 Маршрутизация динамически
Home
Current
News
Schedule
Club
History
Management
Referee
Restaurant
Team
First
Table
Squad
Second
Table
Squad
Old
Table
Squad
Djunior
Table
Squad
Efjunior
Table
Squad
National
Table
Squad
Utility
Table
Squad
Sponsor
About
Approach
Contact
Disclaimer
Imprint
Мой module.config.php как это:
return array(
'router' => array(
'routes' => array(
//Literal-Route: Home
//Controller: IndexController
//View: index/index.phtml
'home' => array(
'type' => 'Zend\Mvc\Router\Http\Literal',
'options' => array(
'route' => '/',
'defaults' => array(
'controller' => 'Football\Controller\Index',
'action' => 'index',
),
),
),
//Segment-Route: football
'football' => array(
'type' => 'segment',
'options' => array(
'route' => '[/:controller[/:action]]',
'constraints' => array(
'controller' => '[a-zA-Z][a-zA-Z0-9_-]*',
'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
),
'defaults' => array(
'__NAMESPACE__' => 'Football\Controller',
'controller' => 'index',
'action' => 'index',
),
),
),
'subteam' => array(
'type' => 'segment',
'options' => array(
'route' => '[/:controller[[/first]/:action]]',
'constraints' => array(
'controller' => '[a-zA-Z][a-zA-Z0-9_-]*',
'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
),
'defaults' => array(
'__NAMESPACE__' => 'Football\Controller',
'controller' => 'index',
'action' => 'index',
),
),
),
),
),
'controllers' => array(
'invokables' => array(
'Football\Controller\Index' => 'Football\Controller\IndexController',
'Football\Controller\Current' => 'Football\Controller\CurrentController',
'Football\Controller\About' => 'Football\Controller\AboutController',
'Football\Controller\Sponsor' => 'Football\Controller\SponsorController',
'Football\Controller\Club' => 'Football\Controller\ClubController',
'Football\Controller\Team' => 'Football\Controller\TeamController',
),
),
'service_manager' => array(
'factories' => array(
'navigation' => 'Zend\Navigation\Service\DefaultNavigationFactory',
'translator' => 'Zend\I18n\Translator\TranslatorServiceFactory',
),
),
'translator' => array(
'locale' => 'en_US',
'translation_file_patterns' => array(
array(
'type' => 'gettext',
'base_dir' => __DIR__ . '/../language',
'pattern' => '%s.mo',
),
),
),
'navigation' => array(
'default' => array(
//localhost
array(
'label' => 'Home',
'route' => 'home',
),
//localhost/current
'current' => array(
'type' => 'mvc',
'order' => '100',
'label' => 'Aktuelles',
'route' => 'football',
'controller' => 'current',
'action' => 'index',
'pages' => array(
//localhost/current/news
'news' => array(
'type' => 'mvc',
'order' => '100',
'label' => 'Nachrichten',
'route' => 'football',
'controller' => 'current',
'action' => 'news',
),
//localhost/current/schedule
'schedule' => array(
'type' => 'mvc',
'order' => '200',
'label' => 'Trainingszeiten',
'route' => 'football',
'controller' => 'current',
'action' => 'schedule',
),
),
),
//localhost/club
'club' => array(
'type' => 'mvc',
'order' => '200',
'label' => 'Verein',
'route' => 'football',
'controller' => 'club',
'action' => 'index',
'pages' => array(
//localhost/club/history
'history' => array(
'type' => 'mvc',
'order' => '100',
'label' => 'Geschichte',
'route' => 'football',
'controller' => 'club',
'action' => 'history',
),
//localhost/club/management
'management' => array(
'type' => 'mvc',
'order' => '200',
'label' => 'Vorstand',
'route' => 'football',
'controller' => 'club',
'action' => 'management',
),
//localhost/club/referee
'referee' => array(
'type' => 'mvc',
'order' => '300',
'label' => 'Schiedsrichter',
'route' => 'football',
'controller' => 'club',
'action' => 'referee',
),
//localhost/club/restaurant
'restaurant' => array(
'type' => 'mvc',
'order' => '400',
'label' => 'Gaststätte',
'route' => 'football',
'controller' => 'club',
'action' => 'restaurant',
),
),
),
//localhost/team
'team' => array(
'type' => 'mvc',
'order' => '300',
'label' => 'Mannschaften',
'route' => 'football',
'controller' => 'team',
'action' => 'index',
'pages' => array(
//localhost/team/first
'first' => array(
'type' => 'mvc',
'order' => '100',
'label' => '1. Herren',
'route' => 'football',
'controller' => 'team',
'action' => 'first',
'pages' => array(
//localhost/team/first/table
'table' => array(
'type' => 'mvc',
'order' => '100',
'label' => 'Tabelle',
'route' => 'subteam',
'controller' => 'team',
'action' => 'table',
),
//localhost/team/first/squad
'squad' => array(
'type' => 'mvc',
'order' => '200',
'label' => 'Mannschaftskader',
'route' => 'subteam',
'controller' => 'team',
'action' => 'squad',
),
),
),
//localhost/team/second
'second' => array(
'type' => 'mvc',
'order' => '200',
'label' => '2. Herren',
'route' => 'football',
'controller' => 'team',
'action' => 'second',
'pages' => array(
//localhost/team/second/table
'table' => array(
'type' => 'mvc',
'order' => '100',
'label' => 'Tabelle',
'route' => 'subteam',
'controller' => 'team',
'action' => 'table',
),
//localhost/team/second/squad
'squad' => array(
'type' => 'mvc',
'order' => '200',
'label' => 'Mannschaftskader',
'route' => 'subteam',
'controller' => 'team',
'action' => 'squad',
),
),
),
//localhost/team/old
'old' => array(
'type' => 'mvc',
'order' => '300',
'label' => 'Alte Herren',
'route' => 'football',
'controller' => 'team',
'action' => 'old',
'pages' => array(
//localhost/team/old/table
'table' => array(
'type' => 'mvc',
'order' => '100',
'label' => 'Tabelle',
'route' => 'subteam',
'controller' => 'team',
'action' => 'table',
),
//localhost/team/old/squad
'squad' => array(
'type' => 'mvc',
'order' => '200',
'label' => 'Mannschaftskader',
'route' => 'subteam',
'controller' => 'team',
'action' => 'squad',
),
),
),
//localhost/team/djunior
'djunior' => array(
'type' => 'mvc',
'order' => '400',
'label' => 'D-Junioren',
'route' => 'football',
'controller' => 'team',
'action' => 'djunior',
'pages' => array(
//localhost/team/djunior/table
'table' => array(
'type' => 'mvc',
'order' => '100',
'label' => 'Tabelle',
'route' => 'subteam',
'controller' => 'team',
'action' => 'table',
),
//localhost/team/djunior/squad
'squad' => array(
'type' => 'mvc',
'order' => '200',
'label' => 'Mannschaftskader',
'route' => 'subteam',
'controller' => 'team',
'action' => 'squad',
),
),
),
//localhost/team/efjunior
'efjunior' => array(
'type' => 'mvc',
'order' => '500',
'label' => 'E/F-Junioren',
'route' => 'football',
'controller' => 'team',
'action' => 'efjunior',
'pages' => array(
//localhost/team/efjunior/table
'table' => array(
'type' => 'mvc',
'order' => '100',
'label' => 'Tabelle',
'route' => 'subteam',
'controller' => 'team',
'action' => 'table',
),
//localhost/team/efjunior/squad
'squad' => array(
'type' => 'mvc',
'order' => '200',
'label' => 'Mannschaftskader',
'route' => 'subteam',
'controller' => 'team',
'action' => 'squad',
),
),
),
//localhost/team/national/
'national' => array(
'type' => 'mvc',
'order' => '600',
'label' => 'Volkssport',
'route' => 'football',
'controller' => 'team',
'action' => 'national',
'pages' => array(
//localhost/team/national/table
'table' => array(
'type' => 'mvc',
'order' => '100',
'label' => 'Tabelle',
'route' => 'subteam',
'controller' => 'team',
'action' => 'table',
),
//localhost/team/national/squad
'squad' => array(
'type' => 'mvc',
'order' => '200',
'label' => 'Mannschaftskader',
'route' => 'subteam',
'controller' => 'team',
'action' => 'squad',
),
),
),
//localhost/team/utility/
'utility' => array(
'type' => 'mvc',
'order' => '700',
'label' => 'Stadtwerke',
'route' => 'football',
'controller' => 'team',
'action' => 'utility',
'pages' => array(
//localhost/team/utility/table
'table' => array(
'type' => 'mvc',
'order' => '100',
'label' => 'Tabelle',
'route' => 'subteam',
'controller' => 'team',
'action' => 'table',
),
//localhost/team/utility/squad
'squad' => array(
'type' => 'mvc',
'order' => '200',
'label' => 'Mannschaftskader',
'route' => 'subteam',
'controller' => 'team',
'action' => 'squad',
),
),
),
),
),
//localhost/sponsor
'sponsor' => array(
'type' => 'mvc',
'order' => '400',
'label' => 'Sponsoren',
'route' => 'football',
'controller' => 'sponsor',
'action' => 'index',
),
//localhost/about
'about' => array(
'type' => 'mvc',
'order' => '500',
'label' => 'Über uns',
'route' => 'football',
'controller' => 'about',
'action' => 'index',
'pages' => array(
//localhost/about/approach
'approach' => array(
'type' => 'mvc',
'order' => '100',
'label' => 'Anfahrt',
'route' => 'football',
'controller' => 'about',
'action' => 'approach',
),
//localhost/about/contact
'contact' => array(
'type' => 'mvc',
'order' => '200',
'label' => 'Kontakt',
'route' => 'football',
'controller' => 'about',
'action' => 'contact',
),
//localhost/about/disclaimer
'disclaimer' => array(
'type' => 'mvc',
'order' => '300',
'label' => 'Disclaimer',
'route' => 'football',
'controller' => 'about',
'action' => 'disclaimer',
),
//localhost/about/imprint
'imprint' => array(
'type' => 'mvc',
'order' => '400',
'label' => 'Impressum',
'route' => 'football',
'controller' => 'about',
'action' => 'imprint',
),
),
),
),
),
'view_manager' => array(
'display_not_found_reason' => true,
'display_exceptions' => true,
'doctype' => 'HTML5',
'not_found_template' => 'error/404',
'exception_template' => 'error/index',
'template_map' => array(
'layout/layout' => __DIR__ . '/../view/layout/layout.phtml',
'layout/header' => __DIR__ . '/../view/layout/header.phtml',
'layout/sidebar' => __DIR__ . '/../view/layout/sidebar.phtml',
'layout/footer' => __DIR__ . '/../view/layout/footer.phtml',
'football/index/index' => __DIR__ . '/../view/football/index/index.phtml',
'error/404' => __DIR__ . '/../view/error/404.phtml',
'error/index' => __DIR__ . '/../view/error/index.phtml',
),
'template_path_stack' => array(
__DIR__ . '/../view',
),
),
);
Я думаю, что моя проблема сейчас subteam-маршрут, потому что это статический поэтому, когда я нажимаю, например, на Team-> Second-> Table маршрут будет «Team-> First-> Table». Неважно, какая команда я нажимаю на эту «первую» часть, всегда есть, и я не знаю, как я делаю ее динамически. Надеюсь, это понятно для вас, ребята, и кто-то может объяснить мне, как сделать эти командные маршруты динамически. :)
Редактировать: Я обновил module.config.php, теперь вы видите весь файл.
AboutController.php
namespace Football\Controller;
use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;
class AboutController extends AbstractActionController
{
public function indexAction()
{
return new ViewModel();
}
public function contactAction()
{
return new ViewModel();
}
public function approachAction()
{
return new ViewModel();
}
public function disclaimerAction()
{
return new ViewModel();
}
public function imprintAction()
{
return new ViewModel();
}
ClubController.php
namespace Football\Controller;
use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;
class ClubController extends AbstractActionController
{
public function indexAction()
{
return new ViewModel();
}
public function historyAction()
{
return new ViewModel();
}
public function managementAction()
{
return new ViewModel();
}
public function refereeAction()
{
return new ViewModel();
}
public function restaurantAction()
{
return new ViewModel();
}
CurrentController.php
namespace Football\Controller;
use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;
class CurrentController extends AbstractActionController
{
public function indexAction()
{
return new ViewModel();
}
public function newsAction()
{
return new ViewModel();
}
public function scheduleAction()
{
return new ViewModel();
}
IndexController.php
namespace Football\Controller;
use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;
class IndexController extends AbstractActionController
{
public function indexAction()
{
return new ViewModel();
}
public function clubAction()
{
return new ViewModel();
}
public function contactAction()
{
return new ViewModel();
}
public function currentAction()
{
return new ViewModel();
}
public function teamAction()
{
return new ViewModel();
}
public function sponsorAction()
{
return new ViewModel();
}
public function approachAction()
{
return new ViewModel();
}
public function imprintAction()
{
return new ViewModel();
}
SponsorController.php
namespace Football\Controller;
use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;
class SponsorController extends AbstractActionController
{
public function indexAction()
{
//DatenbankAdapter holen
$db = $this->getServiceLocator()->get('db');
return new ViewModel(array('db' => $db));
}
TeamController.php
namespace Football\Controller;
use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;
class TeamController extends AbstractActionController
{
public function indexAction()
{
return new ViewModel();
}
public function firstAction()
{
return new ViewModel();
}
public function tableAction()
{
return new ViewModel();
}
public function squadAction()
{
return new ViewModel();
}
public function secondAction()
{
return new ViewModel();
}
public function oldAction()
{
return new ViewModel();
}
public function djuniorAction()
{
return new ViewModel();
}
public function efjuniorAction()
{
return new ViewModel();
}
public function nationalAction()
{
return new ViewModel();
}
public function utilityAction()
{
return new ViewModel();
}
Никто не имеет идеи/советы/решение моей проблемы? –
Мне немного сложно следить за тем, что вы пытаетесь сделать. Не могли бы вы представить список своих контроллеров с действиями и как они должны соответствовать структуре навигации, которую вы предоставили? Маршруты, которые у вас там есть, настолько универсальны, что трудно сказать, что делать с картой. – guessimtoolate
Я добавил полный файл module.config.php и мои контроллеры, надеюсь, что это то, что вам нужно. Возможно, я снова скажу проблему: я пытаюсь добраться, например. эта ссылка home-> team-> second-> table, но когда я перейду на сайт, я получу home-> team-> first-> table. Поэтому я получаю неправильную таблицу от неправильной команды. Я думаю, что проблема заключается в маршруте «subteam», но я не знаю, как его решить. –