まず、この機能で作成したすべての可能性を認識してください。本当にこれが必要ですか?
autoAddInvokableClass
次に、「ルート」サービス マネージャーにはプロパティがありません。ただし、独自のサービス マネージャーを作成して、それを既定のサービス マネージャーとして登録することはできます。
カスタムを作成します。
<?php
namespace MyLib\ServiceManager;
use Zend\ServiceManager as BaseServiceManager;
class ServiceManager extends BaseServiceManager
{
protected $autoAddInvokableClass = true;
public function get($name, $options = array(), $usePeeringServiceManagers = true)
{
// Allow specifying a class name directly; registers as an invokable class
if (!$this->has($name) && $this->autoAddInvokableClass && class_exists($name)) {
$this->setInvokableClass($name, $name);
}
return parent::get($name, $options, $usePeeringServiceManagers);
}
}
コントローラーローダーを含む、すべてのサービスマネージャーがこのマネージャーから拡張されることに注意してください。したがって、ルートがある場合、パラメーターでFQCNを指定すると、この方法で任意のクラス/foo/:controller[/:action]
をロードできます。:controller
とにかく、そうは言っても、アプリケーション構成でこの SM を有効にするだけです。
<?php
return array(
'modules' => array(
'Application',
// Your module here
),
'module_listener_options' => array(
'module_paths' => array(
'./module',
'./vendor',
),
'config_glob_paths' => array(
'config/autoload/{,*.}{global,local}.php',
),
),
// Used to create an own service manager. May contain one or more child arrays.
'service_listener_options' => array(
array(
'service_manager' => 'MyLib\ServiceManager\ServiceManager',
),
),
);