Маршрутизация Yii2 при использовании имен действий CamelCase

Если вы скажете следующую структуру контроллера

<?php namespace app\controllers; use Yii; use yii\web\Controller; /** * Test controller */ class TestController extends Controller { public function actionMyaction(){ ... //action logic } public function actionMyAction(){ ... //action logic } } 

Доступ к первому маршруту возможен с помощью пути example.com/test/myaction

Второй маршрут по логике Yii 1.x должен быть доступен из пути example.com/test/myAction в Yii2.x. Маршрутизация использует дефисную структуру и доступна только из example.com/test/my-action

Есть ли способ разрешить маршрутизацию с использованием структуры camelCase в Yii2, предпочтительно без расширения классов маршрутизации?

Это важно, так как он нарушает всю обратную совместимость (что, конечно, по всему Интернету), и поэтому приложение Yii1.x никогда не может быть перенесено на Yii2.x, даже если код полностью переписан. В чем причина этих изменений?

Я тоже немного расслышал об этом изменении, но в итоге нашел, что URL-адрес легче читать. Я не был уверен в том, что у меня есть чувствительный к регистру маршрут в Yii1, в Yii2. У меня больше нет этой проблемы (или впечатления от проблемы).

Я не уверен точно, но я могу сказать, что для SEO лучше иметь – разделение слов вместо одного большого слова.

Когда я переписал приложение в yii2, я включил в менеджер URL всех старых маршрутов, которые мне нужно поддерживать.

  'urlManager' => [ 'class' => 'yii\web\UrlManager', 'enablePrettyUrl' => true, 'showScriptName' => false, 'rules' => [ ................................................. 'site/registerInterest' => 'site/register-interest', ................................................. ], ], 

Так что мои старые ссылки работают сейчас просто отлично. Вы также можете переадресовать 301 в .htaccess, если хотите, чтобы старые маршруты были новыми, чтобы сохранить сок SEO.

Вы можете сделать свой собственный Basecontroller и перезаписать createAction с помощью шаблона, чтобы прописные буквы

preg_match('/^[a-zA-Z0-9\\-_]

  public function createAction($id) { if ($id === '') { $id = $this->defaultAction; } $actionMap = $this->actions(); if (isset($actionMap[$id])) { return Yii::createObject($actionMap[$id], [$id, $this]); } elseif (preg_match('/^[a-zA-Z0-9\\-_]+$/', $id) && strpos($id, '--') === false && trim($id, '-') === $id) { $methodName = 'action' . str_replace(' ', '', ucwords(implode(' ', explode('-', $id)))); if (method_exists($this, $methodName)) { $method = new \ReflectionMethod($this, $methodName); if ($method->isPublic() && $method->getName() === $methodName) { return new InlineAction($id, $this, $methodName); } } } return null; }