Kini perniagaan syarikat perlu menambah lapisan perkhidmatan berdasarkan lapisan C untuk menggantikan pengawal untuk sebahagian daripada pemprosesan perniagaan
Jadi saya mencipta folder Perkhidmatan baharu dalam direktori apl, dan kemudian memanggil dalam c pengawal lapisan:
$services = App::make('Nama kelas lengkap perkhidmatan yang akan dipanggil');
Walaupun kelas yang dinyatakan dalam folder perkhidmatan boleh diperolehi, jika pembina kelas ini memerlukan parameter, ia tidak boleh diluluskan sama sekali.
Saya cuba menulis seperti ini:
lapisan pengawal:
public function test(){
$services = \App::make('App\Services\Servicetest',[1,2]);
$services->test();
}
Tulis ini dalam Servicetest.php dalam direktori aplikasi/perkhidmatan:
public function __construct($a, $b){
echo $a;
echo $b;
echo 111;
exit;
}
public function test(){
echo '成功';
}
Sangat pelik apabila objek yang diinstantiasi $services diperoleh melalui kaedah make, pembina __construct()nya tidak dicetuskan dan $a, $b dan 111 bukan output, tetapi $services->test() adakah Ia telah berjaya dilaksanakan dan 'berjaya' telah dikeluarkan
Jika ya, bolehkah anda beritahu saya jika saya ingin memperkenalkan dan melaksanakan kelas dalam folder perkhidmatan dalam pengawal untuk berkongsi beban? Bagaimanakah cara saya memperkenalkan pelaksanaan sebahagian daripada logik perniagaan? Saya fikir kaedah App::make() adalah sangat baik. Ia tidak memerlukan manual memerlukan dan secara langsung memperoleh objek instantiated tetapi tidak Melaksanakan output pembina 111? Bagaimanakah saya boleh menghantar parameter kepada pembina lapisan perkhidmatan melalui App::make() pada lapisan c?
Mengharap bantuan anda, terima kasih semua.
Saya tidak tahu bagaimana anda berjaya Sekurang-kurangnya saya mengikuti pendekatan anda dan mengujinya secara tempatan, tetapi ia tidak berjaya (Laravel saya ialah versi 5.4).
Saya juga melihat kod yang berkaitan
App::make('className')
Pertama sekali, kaedah ini tidak menyokong menghantar parameter kepada kaedah pembina.App::make('className')
相关的代码, 首先该方法不支持为构造方法传参数。如果需要向构造方法传参数,请使用
App::makeWith('className', [param1, param2, ...])
。其代码实现是利用反射,检查构造函数是否需要传参数:
3, jika perlu Jika parameter diluluskan, dan parameter ialah parameter yang tidak boleh dijadikan instantiated (contohnya, pembolehubah tanpa pembayang jenis, pembayang jenis ialah integer, rentetan, titik terapung, dsb.), kemudian semak lagi sama ada terdapat parameter lalai dan jika terdapat parameter lalai, lulus parameter lalai Pergi ke pembina, jika tiada parameter lalai, pengecualian akan dilemparkan, seperti yang ditunjukkan di bawah: 🎜🎜🎜🎜🎜1,如果不需要传参数,则直接实例化
2,如果需要传参数,且参数为可实例化的类,则尝试实例化该类(循环进入
App::make
或App::makeWith()
Jika anda perlu menghantar parameter kepada pembina, sila gunakan
App::makeWith('className', [param1, param2, ...])
.Pelaksanaan kod menggunakan pantulan untuk menyemak sama ada pembina perlu lulus parameter: 1 Jika tiada parameter diperlukan, instantiate terus 2 Jika parameter perlu dihantar dan parameter adalah kelas boleh segera, cuba buat instantiate Kelas ini (gelung ke dalam logik
App::make
atauApp::makeWith()
), dan lulus kelas instantiated sebagai parameterLupakan tentang kelas statik secara langsung Saya kemudiannya mendapati bahawa ia perlu disegerakan setiap kali Walaupun instantiasi automatik disuntik ke dalam pengawal, memanggilnya di tempat lain perlu dilakukan secara manual, jadi semuanya dikelaskan oleh saya. . . . .
Tidak dapatkah suntikan pergantungan menyelesaikannya