zend framework3で時間割作成サイトを作ってみる4

スポンサーリンク

zend framework3チュートリアルでわかったことをもとに、
時間割作成サイトを作成してみます。続きです

更新が遅れたのは気のせいです。

おそらくチュートリアルになかったことをしていきます。
まず、前回画像にあった、all rights 何とかや、上部のskeleton applicationを取り除きます。

これらが保管されている場所を特定。
schedule/module/Application/view/layout/layout.phtml
のようです。
なぜこれが呼び出されているのかを特定します。

…わかりませんでした。
なので、試しに、オートロードに、Applicationというモジュールが消えたことを通知してみます。
schedule/composer.jsonから以下を削除

    "autoload": {
        "psr-4": {
            "Application\\": "module/Application/src/" <- この行を削除
            "Schedule\\": "module/Schedule/src/"
        }
    },

schedule/config/modules.config.phpから以下を削除

return [
    'Zend\Form',
    'Zend\Db',
    'Zend\Router',
    'Zend\Validator',
    //'Application', <-これを削除
    'Schedule',
];

実行したときに出たエラーをもとに、変更すべき点を特定していきます。

…可能性のあるものが見つかりました。schedule/module/Application/config/module.config.phpです。
自分が作成した、schedule/module/Schedule/config/module.config.phpにない行がいくつかあったので、それを移植します。同時に、移植した内容から読み取れる、必要なファイルなども、Applicationモジュールからコピー&ペーストします。

まずは、移植します。schedule/module/Schedule/config/module.config.php

'view_manager' =>[
	//移植開始
	'display_not_found_reason' => true,
        'display_exceptions'       => true,
        'doctype'                  => 'HTML5',
        'not_found_template'       => 'error/404',
        'exception_template'       => 'error/index',
        'template_map' => [
            //一時的にコメントにしておきます。なんとなく、直感です
            //'layout/layout'           => __DIR__ . '/../view/layout/layout.phtml',
            //'application/index/index' => __DIR__ . '/../view/application/index/index.phtml',
            'error/404'               => __DIR__ . '/../view/error/404.phtml',
            'error/index'             => __DIR__ . '/../view/error/index.phtml',
        ],
        //移植終了
	'template_path_stack' => [
		'schedule' => __DIR__ . '/../view'
	],
],

 

エラー画面が必要なようなので、それをコピーします。
schedule\module\Application\view\errorフォルダをそのまま
schedule\module\Schedule\view\errorとしてコピーします。中身もそのままコピーです

これで実行してみます。だめでした。layout/layoutが解決できないなどと言ってきました。
もしかしたら必ず必要なものなのかもしれません。
schedule\module\Application\view\layoutフォルダもコピー&ペーストしましょう。
直感で一時的にコメントアウトしていた行のうち、layout/layoutの行を有効にして実行します。

homeなんてルートがないよ、といわれました。
なんということでしょう。直感は半分当たったみたいです。面倒くさい。

ルーティングの設定をいじる必要があるみたいです。

schedule/module/Schedule/config/module.config.phpファイルと
schedule/module/Application/config/module.config.phpファイルを比較すると、確かに私が作成したほうにはhomeが存在しませんでした。
home部分をコピーします。

'router' =>[
	'routes' =>[
//これを追加します
		'home' => [
			'type' => Literal::class,
			'options' => [
				'route'    => '/',
				'defaults' => [
                                        //この行は一部変更します
                    'controller' => Controller\ScheduleController::class,
					//'controller' => Controller\IndexController::class,
					'action'     => 'index',
				],
			],
		],
		'schedule' =>[
			'type' => Segment::class,
			'options' =>[
				'route' => '/schedule[/:action[/:day/:period]]',
				'constraints' =>[
					'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
					'day' => '[1-5]',
					'period' => '[1-6]',
				],
				'defaults' => [
					'controller' => Controller\ScheduleController::class,
					'action' => 'index',
				]
			],
		],
	],
],

コピーした内容を見たところ、特にこれ以上変更する必要はなさそうです。実行。

 

エラー文は出ませんでしたが、なんかおかしいです。

画面のソースを確認したところ、どうもいろいろと足りないものがあるようです。
つまりは、layout/layout.phtmlファイルを本格的に編集する必要があるみたいです。

めんどくさやりましょう。

編集後のlayout/layout.phtmlを載せます。

<?= $this->doctype() ?>
<!--私は日本人なので、言語を日本語にしておきます、一応-->
<html lang="ja">
    <head>
        <meta charset="utf-8">
        <!--害が薄そう 残す-->
        <?= $this->headTitle('ZF Skeleton Application')->setSeparator(' - ')->setAutoEscape(false) ?>

        <!--害が薄そう 残す-->
        <?= $this->headMeta()
            ->appendName('viewport', 'width=device-width, initial-scale=1.0')
            ->appendHttpEquiv('X-UA-Compatible', 'IE=edge')
        ?>

        <!-- Le styles -->
        <!--ファイル参照が害悪感 コメントアウトします-->

        <!--?= $this->headLink(['rel' => 'shortcut icon', 'type' => 'image/vnd.microsoft.icon', 'href' => $this->basePath() . '/img/favicon.ico'])
            ->prependStylesheet($this->basePath('css/style.css'))
            ->prependStylesheet($this->basePath('css/bootstrap-theme.min.css'))
            ->prependStylesheet($this->basePath('css/bootstrap.min.css'))
        ?-->

        <!-- Scripts -->
        <!--ファイル参照が害悪感 コメントアウトします-->
        <!--?= $this->headScript()
            ->prependFile($this->basePath('js/bootstrap.min.js'))
            ->prependFile($this->basePath('js/jquery-3.1.0.min.js'))
        ?-->
    </head>
    <body>
        <!--この部分おそらく上部のskeleton applicationを表示する部分だと思われる。コメントアウトしてますが、削除してください-->
        <!--nav class="navbar navbar-inverse navbar-fixed-top" role="navigation">
            <div class="container">
                <div class="navbar-header">
                    <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
                        <span class="icon-bar"></span>
                        <span class="icon-bar"></span>
                        <span class="icon-bar"></span>
                    </button>
                    <a class="navbar-brand" href="<?= $this->url('home') ?>">
                        <img src="<?= $this->basePath('img/zf-logo-mark.svg') ?>" height="28" alt="Zend Framework <?= \Application\Module::VERSION ?>"/>&nbsp;Skeleton Application
                    </a>
                </div>
                <div class="collapse navbar-collapse">
                    <ul class="nav navbar-nav">
                        <li class="active"><a href="<?= $this->url('home') ?>">Home</a></li>
                    </ul>
                </div>
            </div>
        </nav-->

        <!--直感が、この部分は必要であると言っています。 残しましょう-->
        <div class="container">
            <?= $this->content ?>
            <hr>
            <footer>
                <!--もともとあなたを消すのが目的。ここではコメントアウトしてますが、削除します-->
                <!--p>&copy; 2005 - <?= date('Y') ?> by Zend Technologies Ltd. All rights reserved.</p-->
            </footer>
        </div>
        <?= $this->inlineScript() ?>
    </body>
</html>

 

保存して、さぁ実行!

 

でたわ。できたわ。これで私は最強。

実行後はこうなりました。

 

時間割です。本物です!cssも無効です!余計なものも消えました!
完璧!

このあたりは、この時間割アプリケーションが完成したらまとめたいと思います。
新しくzend framework3でウェブアプリケーションを作成するときに必要な処理として。

ちょっと調べたんですが、BSDライセンスというものがあるので
BSDライセンスの条件を満たせば、ソースコードをそのまま使用できるみたいです。
使用時は、

  • 付属しているライセンス条項部分を、作成したアプリケーションのどこかに表示する

という条件のようで、それをしていれば、ソースコードを非公開にしていてもよいという、ちょっと便利なライセンスみたい。
なので、私が削除したい、と思っていたfooter部分は、アプリケーションのローンチ時には、ライセンスをリンクで表示する等の処理が必要になるみたいです。

 

なんだかこのメモで、zend framework3の仕組みを、大まかではあるけど結構理解できた気がしてきました。気がするだけですけど。

次からは、ビューの具体的な作成と、あといろいろしていきます。
今日は達成感もあったけど疲れました。休息ください。

コメント

タイトルとURLをコピーしました