在 laravel 5 中定义可用于多个控制器(简称库)的方法
Defining methods which can be used in multiple controllers (in short library) in laravel 5
我想定义一些可以在多个地方或多个控制器中使用的方法。基本上这些方法就像将执行多个查询的库。
我的主要目的是通过创建一些库来避免多次编写公共逻辑。
请帮助我。
提前致谢:)
很简单,在 app
文件夹中构建您自己的库,然后创建新文件 MyLibrary.php
namespace App;
Class MyLibrary {
public static function sum($a, $b) {
return $a + $b;
}
}
然后在您的 config/app.php
中创建别名
'MyLibrary' => App\MyLibrary::class,
最后你可以在控制器的任何地方调用它
$result = MyLibrary::sum(4, 5); // your $result now have value of 9
您可以创建一个名为 lib 的文件夹,并在其中创建一个 functions.php 文件,然后在 composer.json
...
"autoload": {
"files": [
"app/lib/functions.php"
],
...
和运行 composer dump-autoload
取决于你想做什么。以下是一些选项:
默认情况下,所有控制器都会扩展 App\Http\Controllers\Controller
class。只需将控制器之间的所有共享逻辑放在那里即可。
对于对数据库的复杂查询,您可以创建一个存储库并注入控制器。
class UserRepository {
public function getActiveUsers() {
return Users::with('role')
->where('...')
->someQueryScopes()
->anotherQueryScope()
->yetAnotherScope();
}
}
class SomeController extends Controller {
public function index(UserRepository $repository) {
$users = $repository->getActiveUsers();
return view('users.index')->withUsers($users);
}
}
另一种选择是为业务逻辑创建服务 classes 并将它们注入构造函数或相关方法
class UserCreatorService {
public function create($email, $password){
$user = User::create(['email' => $email, 'password' => $password]);
$user->addRole('Subscriber');
Event::fire(new UserWasCreated($user));
return $user;
}
}
class RegisterController extends Controller {
public function store(Request $request, UserCreatorService $service) {
$user = $service->create($request->input('email'), $request->input('password'));
return view('home')->withUser($user);
}
}
使用助手 classes 并在其中创建常用函数。
在 app 文件夹中创建一个名为 helper 的文件夹,并在其中创建一个 helper class。然后根据需要在多个控制器或视图中使用该助手 class 的功能。
我想定义一些可以在多个地方或多个控制器中使用的方法。基本上这些方法就像将执行多个查询的库。
我的主要目的是通过创建一些库来避免多次编写公共逻辑。
请帮助我。
提前致谢:)
很简单,在 app
文件夹中构建您自己的库,然后创建新文件 MyLibrary.php
namespace App;
Class MyLibrary {
public static function sum($a, $b) {
return $a + $b;
}
}
然后在您的 config/app.php
'MyLibrary' => App\MyLibrary::class,
最后你可以在控制器的任何地方调用它
$result = MyLibrary::sum(4, 5); // your $result now have value of 9
您可以创建一个名为 lib 的文件夹,并在其中创建一个 functions.php 文件,然后在 composer.json
...
"autoload": {
"files": [
"app/lib/functions.php"
],
...
和运行 composer dump-autoload
取决于你想做什么。以下是一些选项:
默认情况下,所有控制器都会扩展 App\Http\Controllers\Controller
class。只需将控制器之间的所有共享逻辑放在那里即可。
对于对数据库的复杂查询,您可以创建一个存储库并注入控制器。
class UserRepository {
public function getActiveUsers() {
return Users::with('role')
->where('...')
->someQueryScopes()
->anotherQueryScope()
->yetAnotherScope();
}
}
class SomeController extends Controller {
public function index(UserRepository $repository) {
$users = $repository->getActiveUsers();
return view('users.index')->withUsers($users);
}
}
另一种选择是为业务逻辑创建服务 classes 并将它们注入构造函数或相关方法
class UserCreatorService {
public function create($email, $password){
$user = User::create(['email' => $email, 'password' => $password]);
$user->addRole('Subscriber');
Event::fire(new UserWasCreated($user));
return $user;
}
}
class RegisterController extends Controller {
public function store(Request $request, UserCreatorService $service) {
$user = $service->create($request->input('email'), $request->input('password'));
return view('home')->withUser($user);
}
}
使用助手 classes 并在其中创建常用函数。
在 app 文件夹中创建一个名为 helper 的文件夹,并在其中创建一个 helper class。然后根据需要在多个控制器或视图中使用该助手 class 的功能。