enc*_*nce 19 php controller laravel
我有这条路线:Route::controller('/', 'PearsController');
在Laravel中是否可以让PearsController从另一个控制器加载一个方法,这样URL就不会改变?
例如:
// route:
Route::controller('/', 'PearsController');
// controllers
class PearsController extends BaseController {
public function getAbc() {
// How do I load ApplesController@getSomething so I can split up
// my methods without changing the url? (retains domain.com/abc)
}
}
class ApplesController extends BaseController {
public function getSomething() {
echo 'It works!'
}
}
Run Code Online (Sandbox Code Playgroud)
The*_*pha 37
你可以使用(仅限L3)
Controller::call('ApplesController@getSomething');
Run Code Online (Sandbox Code Playgroud)
在L4
你可以使用
$request = Request::create('/apples', 'GET', array());
return Route::dispatch($request)->getContent();
Run Code Online (Sandbox Code Playgroud)
在这种情况下,您必须为此ApplesController
类似的路径定义
Route::get('/apples', 'ApplesController@getSomething'); // in routes.php
Run Code Online (Sandbox Code Playgroud)
array()
如果需要,您可以传递参数.
Joe*_*eri 27
(通过neto 在Laravel 4中调用一个控制器)
使用IoC ......
App::make($controller)->{$action}();
Run Code Online (Sandbox Code Playgroud)
例如:
App::make('HomeController')->getIndex();
Run Code Online (Sandbox Code Playgroud)
你也可以提供参数
App::make('HomeController')->getIndex($params);
Run Code Online (Sandbox Code Playgroud)
Ant*_*iro 11
你不应该.在MVC中,控制器不应该彼此"交谈",如果他们必须共享"数据",他们应该使用模型来执行它,这是在应用程序中负责数据共享的类的类型.看:
// route:
Route::controller('/', 'PearsController');
// controllers
class PearsController extends BaseController {
public function getAbc()
{
$something = new MySomethingModel;
$this->commonFunction();
echo $something->getSomething();
}
}
class ApplesController extends BaseController {
public function showSomething()
{
$something = new MySomethingModel;
$this->commonFunction();
echo $something->getSomething();
}
}
class MySomethingModel {
public function getSomething()
{
return 'It works!';
}
}
Run Code Online (Sandbox Code Playgroud)
编辑
你可以做的是使用BaseController来创建所有控制器共享的通用函数.看看commonFunction
在BaseController
和它是如何在两个控制器使用.
abstract class BaseController extends Controller {
public function commonFunction()
{
// will do common things
}
}
class PearsController extends BaseController {
public function getAbc()
{
return $this->commonFunction();
}
}
class ApplesController extends BaseController {
public function showSomething()
{
return $this->commonFunction();
}
}
Run Code Online (Sandbox Code Playgroud)
如果您在AbcdController
并且尝试访问public function test()
存在于OtherController
您可以执行的方法:
$getTests = (new OtherController)->test();
Run Code Online (Sandbox Code Playgroud)
这应该在L5.1中有效
归档时间: |
|
查看次数: |
43775 次 |
最近记录: |