2015-01-04 19 views
12

Tôi có một vấn đề với việc tích hợp góc và Yii2 tôi có 2 phần:Yii2 + AngularJS

  1. thường xuyên ứng dụng Yii2
  2. điều khiển mà bắt đầu với actionIndex và làm việc với góc

Vấn đề là, khi tôi sao chép và dán url trong phần góc tôi luôn luôn nhận được lỗi 404. Cấu hình góc là

.config(function($routeProvider, $locationProvider) { 
    base = '/construct/'; 
    $routeProvider.when(base+':className', { 
     templateUrl: '/construct/builder', 
     controller: 'BuilderCtrl', 
     reloadOnSearch: false 
    }).otherwise({ 
     templateUrl: '/construct/heroes', 
     controller: 'HeroesCtrl' 
    }); 

    $locationProvider.html5Mode(true); 
    }); 

Vậy, làm cách nào để tạo liên kết trực tiếp trong chế độ HTML5 hoạt động để xem các trang phù hợp? Đường dẫn như "/ construct/something" không hoạt động. htaccess của tôi là:

RewriteEngine on 

# If a directory or a file exists, use the request directly 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
# Otherwise forward the request to index.php 
RewriteRule . index.php 
+0

bạn có thể hiển thị cho chúng tôi url mà góc đang đưa ra yêu cầu và nhận 404 không? cũng là 'xây dựng' một tên thư mục hoặc tên bộ điều khiển yii2? – leninhasda

Trả lời

0

Bởi vì bạn đang làm việc trên các thư mục ảo (ví dụ Alias ​​/ trang web/"/ dir /"), bạn phải sử dụng

RewriteBase/trang web/ trong tập tin cấu hình apache của bạn .

+0

Tài nguyên: http://stackoverflow.com/questions/24974407/htaccess-yii-2-configuration –

+0

Nhưng ứng dụng yii hoạt động tốt với htaccess như vậy. Vấn đề tồn tại trong trường hợp url của góc như tôi nhận thấy trước đây –

1

file .htaccess có vẻ đúng nhưng nếu bạn có DocumentRoot của máy chủ web và ứng dụng web của bạn trong các thư mục riêng biệt, bạn sẽ cần phải bắt đầu bằng cách thiết lập đường RewriteBase trong tập tin .htaccess somthing bạn như thế này nếu sử dụng một hệ điều hành unix dựa trên:

RewriteEngine on 

RewriteBase /~userName/pathToYourYiiProject/web 

# If a directory or a file exists, use the request directly 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
# Otherwise forward the request to index.php 
RewriteRule . index.php 

nếu bạn không nhận được kết quả khi gia nhập con đường bằng tay từ hoa tiêu của bạn sau đó bạn sẽ cần phải kiểm tra xem các url khá được kích hoạt đầu tiên:

'urlManager' => [ 
       'class' => 'yii\web\UrlManager', 
       'enablePrettyUrl' => true, 
       'showScriptName' => false, 
      ], 

(kiểm tra liên kết Mihai cho tài liệu chính thức yii)

cũng kiểm tra xem nếu rewrite_module được kích hoạt trong cấu hình apache của bạn chưa. để kích hoạt và nạp mod_rewrite trong một hệ điều hành linux bạn sẽ phải khởi chạy các kịch bản:

$ cat /etc/apache2/mods-available/rewrite.load 
$ sudo a2enmod rewrite 
$ ls -al /etc/apache2/mods-enabled/rewrite.load 

cuối cùng hãy nhớ rằng phiên bản Apache gần đây (từ 2.3.9) có "AllowOverride None" theo mặc định, bạn sẽ phải thay đổi nó để "AllowOverride All" trong /etc/apache2/apache2.conf (một lần nữa đường dẫn trong hệ điều hành Linux không biết nếu nó giống nhau trong hệ điều hành khác). khởi động lại máy chủ apache của bạn & kiểm tra lại thủ công đường dẫn trong trình điều hướng của bạn, nếu bạn nhận được kết quả định dạng json, thì back-end của bạn đang hoạt động tốt & angularJs sẽ có thể giao tiếp với nó.

1

Vấn đề là máy chủ Web của bạn phải phục vụ khung nhìn chỉ mục AngularJS cho tất cả các đường dẫn bắt đầu bằng/construct /. Dưới đây là một giải pháp cho một Rule URL trong Yii2 rằng không chỉ rằng:

Trong cấu hình của bạn/main.php

'components' => [ 
    // other components here 
    'urlManager' => [ 
     // other URL Manager settings here 
     'rules' => [ 
      'construct/<path:(.*)>'=>'construct/index', 
     ], 
    ], 
] 

Trong controllers/ConstructController của bạn.php:

public function actionIndex($path = '/') 
{ 
    // serve your angularJS index page here 
}