我正在尝试结合一个基于Mobile Angular UI的SPA Angle应用程序,该应用程序可以利用Laravel的功能,如csrf保护。 我可以将整个AngularJS应用程序放在Laravel的public/
目录中,但我不确定这是否是正确的方法。
我正在寻找的是关于如何能够提供可以与Laravel交互的index.php
的指导,单页AngularJS应用程序将从中接管。 就我而言,Laravel是单页应用程序的API。
问题:
- Laravel路由是为从
templates/
返回index.php
的/app3
定义的
当然,我更愿意定义/app
的路由,但是,所有 AngularjS 资产都位于 public/app/
中,请求 app/
返回默认目录列表,因为/app
中没有 index.php/html。 简单地将index.php
放在public/
会导致空白页,因为由于某种原因,PHP永远不会被服务器解析。 将index.php
更改为index.html
有效,但是我如何利用Laravels csrf保护之类的功能呢?
-
index.php
正确加载所有 AngularJS 资源,并且没有控制台错误。 -
单击
index.php
的侧边栏链接,通常会返回一个AngularJS模板,该模板应放置在index.php
中,而是加载目录不包含索引.php/html时显示的默认目录列表。
为什么 AngularJS 模板无法在 index.php
内部加载?
将单页AngularJS应用程序与Laravel相结合的最佳方法是什么?
终于明白了。问题是我的AngularJS路由链接是错误的。
以下是我的工作配置:
Laravel
routes.php
...
$router->get('/app3', function() {
return view('app3.index');
});
AngularJS
index.php
<base href="/" />
...
<!-- Sidebars -->
<div ng-include="'/app/sidebar.html'"
ui-track-as-search-param='true'
class="sidebar sidebar-left"></div>
demo.js
app.config(function($routeProvider) {
$routeProvider.when('/', {templateUrl: 'app/home.html', reloadOnSearch: false});
$routeProvider.when('/app/', {templateUrl: 'app/home.html', reloadOnSearch: false});
$routeProvider.when('/app/scroll', {templateUrl: 'app/scroll.html', reloadOnSearch: false});
$routeProvider.when('/app/toggle', {templateUrl: 'app/toggle.html', reloadOnSearch: false});
$routeProvider.when('/app/tabs', {templateUrl: 'app/tabs.html', reloadOnSearch: false});
$routeProvider.when('/app/accordion', {templateUrl: 'app/accordion.html', reloadOnSearch: false});
$routeProvider.when('/app/overlay', {templateUrl: 'app/overlay.html', reloadOnSearch: false});
$routeProvider.when('/app/forms', {templateUrl: 'app/forms.html', reloadOnSearch: false});
$routeProvider.when('/app/dropdown', {templateUrl: 'app/dropdown.html', reloadOnSearch: false});
$routeProvider.when('/app/drag', {templateUrl: 'app/drag.html', reloadOnSearch: false});
$routeProvider.when('/app/carousel', {templateUrl: 'app/carousel.html', reloadOnSearch: false});
$routeProvider.when('/app/toggleLegacy', {templateUrl: 'app/toggleLegacy.html', reloadOnSearch: false});
sidebar.html
<a class="list-group-item" href="/app3/#/app">Home <i class="fa fa-chevron-right pull-right"></i></a>
<a class="list-group-item" href="/app3/#/app/scroll">Scroll <i class="fa fa-chevron-right pull-right"></i></a>
<a class="list-group-item" href="/app3/#/app/toggle">Toggle <i class="fa fa-chevron-right pull-right"></i></a>
<a class="list-group-item" href="/app3/#/app/tabs">Tabs <i class="fa fa-chevron-right pull-right"></i></a>
<a class="list-group-item" href="/app3/#/app/accordion">Accordion <i class="fa fa-chevron-right pull-right"></i></a>
<a class="list-group-item" href="/app3/#/app/overlay">Overlay <i class="fa fa-chevron-right pull-right"></i></a>
<a class="list-group-item" href="/app3/#/app/forms">Forms <i class="fa fa-chevron-right pull-right"></i></a>
<a class="list-group-item" href="/app3/#/app/dropdown">Dropdown <i class="fa fa-chevron-right pull-right"></i></a>
<a class="list-group-item" href="/app3/#/app/test/invoice">Invoice <i class="fa fa-chevron-right pull-right"></i></a>
<a class="list-group-item" href="/app3/#/app/test">Test <i class="fa fa-chevron-right pull-right"></i></a>
希望这可以帮助想要将移动角度UI与Laravel相结合的人!
感谢@Ohgodwhy澄清 AngularJS 模板需要在public/
目录中。
假设你有这样的路线:
Route::get('/app3', 'RouteController@serveAngular');
然后你有一个控制器
class RouteController extends BaseController{
public function serveAngular(){
return View::make('angular/index');
}
}
然后你就有了
-views
-angular
-index.blade.php
然后在你的index.blade中.php你只需要包含你的角度标记
<div ng-app="myApp">
不需要将ng-app
定义放在 HTML 标记的顶部,只需放在应用程序容器的顶部即可。
当然,您还必须包含您的 AngularJS,以便您的主模板包含以下内容:
@yield('scripts')
</head>
这样,您就可以在角度模板中轻松挂钩
@section('scripts')
<script src="/path/to/my/AnguularJS.js"></script>
@stop
希望这有帮助。
您可以在公用文件夹中执行类似操作
公用文件夹中每个目录的内容:
public/app : Contains all AngularJS related JavaScript files (controllers and lib directories)
public/app/controllers: Contains all AngularJS controllers
public/app/lib : This directory will contain all AngularJS core files. You can also load AngularJS from a CDN network.
public/css : Contains all CSS files.
public/js : Contains all regular JavaScript files for our UI.
您可以在以下位置阅读完整的文章:
http://deepdivetuts.com/create-laravel-and-angular-single-page-application-for-beginners-only