2015-04-20 4 views
7

Можно ли вызвать метод с одного контроллера внутри другого контроллера в Laravel 5 (независимо от метода http, используемого для доступа к каждому методу)?Вызов метода с одного контроллера внутри другого

+0

Техника L4 по http://stackoverflow.com/questions/15205239/call-a-controller-in-laravel-4, вероятно, все еще будет работать. – ceejayoz

+1

Вы наверняка как-то могли это сделать, но если вы находитесь в ситуации, когда вам нужно это сделать, это большой запах кода! Извлеките функциональность, в которой вы нуждаетесь, в отдельный класс, а затем введите ее в свои контроллеры. – Quasdunk

+0

Это большой нет-нет! Вы должны преувеличивать это и создавать класс для этой цели, или абстрактный класс, и расширять все свои контроллеры от него. –

ответ

17

Вот как я это сделал. Используйте ключевое слово use, чтобы сделать доступным OtherController. Затем вы можете вызвать метод из этого класса при создании экземпляра.

<?php namespace App\Http\Controllers; 

use App\Http\Controllers\OtherController; 

class MyController extends Controller { 

    public function __construct() 
    { 
     //Calling a method that is from the OtherController 
     $result = (new OtherController)->method(); 
    } 
} 

Также проверьте концепцию Command в Laravel. Это может дать вам большую гибкость, чем метод выше.

+0

Это то, что я думал делать, но задаюсь вопросом, как передать «Входы»? –

0
use App\Http\Controllers\TargetsController; 

// this controller contains a function to call 
class OrganizationController extends Controller { 
    public function createHolidays() { 
     // first create the reference of this controller 
     $b = new TargetsController(); 
     $mob = 9898989898; 
     $msg = "i am ready to send a msg"; 

     // parameter will be same 
     $result = $b->mytesting($msg, $mob); 
     log::info('my testing function call with return value' . $result); 
    } 
} 

// this controller calls it 
class TargetsController extends Controller { 
    public function mytesting($msg, $mob) { 
     log::info('my testing function call'); 
     log::info('my mob:-' . $mob . 'my msg:-' . $msg); 
     $a = 10; 
     return $a; 
    } 
} 
+0

Это создает еще один контроллер и вызывает его метод. Также направление вызова обратное даже в том, что написано в комментариях –