在前面的章節中我們講解過如何在 Laravel框架中建立後台文件夾.
現在我們再添加一塊內容.是關於自動加載的部分.
在我們app目錄中還有個start目錄.它裡面這樣寫道:
In addition to using Composer, you may use the Laravel class loader to
load your controllers and models. This is useful for keeping all of
your classes in the "global" namespace without Composer updating.
我翻譯一下:除了使用Composer,你還可以使用Laravel的類加載器來加載你的控制器和模型.
這對於讓你的類在不使用Composer updating 的情況下處於全局的名字空間中非常有用.
我們這裡有一個code fragment
ClassLoader::addDirectories(array(
app_path().'/commands',
app_path().'/controllers',
//app_path().'/controllers/admin',
app_path().'/models',
app_path().'/database/seeds',
));
對,很熟悉,這些文件夾都是我們經常用到的文件夾,控制器,命令.模型,數據庫種子
這些文件夾中的內容就是可以自動加載到全局名字空間中的.
但是還多了一個我注釋的內容.這個內容的目的是干什麼呢..
就是讓我們controllers目錄中的admin中的控制器也同樣具有全局的名字空間.這樣我們就可以直接在路由表中通過
我們的控制器名字來接收了.
我測試了一下,確實成功了,而不再需要compoer dumpautoload
但是還是有個問題,如果admin文件夾中有一個控制器和外面的名字相同該怎麼辦?
我也同樣做了一個實驗,最終發現,它只會選擇其中之一,至於到底選擇哪一個,就看我們上面的那個加載的順序了.
如果是
app_path().'/controllers',
app_path().'/controllers/admin',
那麼外部的控制器有效,否則的話,admin文件夾裡面的控制器有效.
結合之前寫的這麼多.其實最保險,也高大上的方法就是使用 名字空間.
但是編寫起來也會更加復雜一點咯...小項目可以考慮我們的方法.大不了注意一下,別讓這些控制器沖突就好了.
又不是沒辦法控制.對吧.
Do one thing at a time,and do well.
Best Wishes.