2016-05-27 1 views
0

を助ける:取り付けサイレックスルート、私はこのような次のルートを登録する必要

$app->register(new HomeServiceProvider()); 
$app->register(new UserServiceProvider()); 

$app->mount('/', new HomeControllerProvider()); 
$app->mount('/', new UserControllerProvider()); 

両方のコントローラは、このような機能を持っている:

$controllers->get("/", 'home.controller:index') 
    ->bind('homepage'); 

$controllers->get("/", 'user.controller:collection') 
    ->bind('users'); 

をそして、私がに行くとき、私はホームページを見ることができます次のURL:

/Testing/demo/web/index.php 

QUESTION:

システム内で唯一のルートがあるように、あなたがこれを修正するにはどうすればよい

$app->mount('/home', new HomeControllerProvider()); 
$app->mount('/user', new UserControllerProvider()); 

しかし、私はちょうど次のために404を取得する:私は上記のマウントを変更しようとしている

/Testing/demo/home 
/Testing/demo/user 

/Testing/demo/web/index.php/home 
/Testing/demo/web/index.php/user 
/Testing/demo/web/home 
/Testing/demo/web/user 
/Testing/demo/home 
/Testing/demo/user 

プロジェクト構造:

root 
-src 
--Home 
--User 
---UserController.php 
---UserControllerProvider.php 
---UserModel.php 
---UserRepository.php 
---UserServideProvider.php 
--Application.php 
-web 
--.htaccess 
--index.php 

の.htaccessファイル:

<IfModule mod_rewrite.c> 
    Options -MultiViews 

    RewriteEngine On 
    RewriteBase /src 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule^index.php [QSA,L] 
</IfModule> 

私はここで何かが足りないのですか?

EDITS:

// UserController.php 
<?php 
namespace App\User; 

use App\Application; 
use Symfony\Component\HttpFoundation\Request; 
use Symfony\Component\HttpFoundation\Response; 

class UserController 
{ 
    protected $app; 

    public function __construct(Application $app) 
    { 
     $this->app = $app; 
    } 

    public function collection() 
    { 
     return $this->app['twig']->render('user/collection.html.twig', [ 
      'users' => $this->app['user.repository']->collection() 
     ]); 
    } 
} 

// UserControllerProvider.php 
<?php 

namespace App\User; 

use Silex\Application; 
use Silex\ControllerProviderInterface; 

class UserControllerProvider implements ControllerProviderInterface 
{ 
    public function connect(Application $app) 
    { 
     $controllers = $app['controllers_factory']; 
     $controllers->get("/", 'user.controller:collection') 
      ->bind('user.collection'); 

     return $controllers; 
    } 
} 
+0

、コードとMax.p更新日質問@ –

+0

をHomeControllerProviderとUserControllerProviderのコードをしてください提供 –

答えて

0

あなたがルートでコントローラを定義する際にエラーが発生しています。

$controllers->get("/", '\\App\\User\\UserController::collection') 
    ->bind('user.collection'); 

コントローラコンストラクタではアプリケーションを使用できません。一致したルートを処理するメソッドに引数として渡されます。 prefixで始まるControllerProviderからのすべてのルートを追加します

class UserController 
{ 
    public function collection(\Silex\Application $app) 
    { 
     return $app['twig']->render('user/collection.html.twig', [ 
      'users' => $app['user.repository']->collection() 
     ]); 
    } 
} 

$app->mount(prefix, ControllerProvider):にコントローラを変更してみてください。例:

class UserControllerProvider implements ControllerProviderInterface 
{ 
public function connect(Application $app) 
{ 
    $controllers = $app['controllers_factory']; 

    // url: /user 
    $controllers->get("/", '\\App\\User\\UserController::collection') 
       ->bind('user.collection'); 

    // url: /user/111 
    $controllers->get("/111", '\\App\\User\\UserController::somemethod') 
       ->bind('user.route111'); 

    return $controllers; 
} 
} 

$app->mount('/user', new UserControllerProvider()) 
関連する問題