Laravel学习笔记(3)控制器

Laravel6文档
Laravel控制器

  1. PHP默认魔术方法中,__invoke,当尝试以调用函数的方式调用一个对象时,该方法会被自动调用

    class invoke
    {
        public function __invoke($x)
        {
            var_dump($x);
        }
    }
     
    $obj = new invoke;
    $obj(10); 
    

    __call和__callStatic,通过对象调用一个它并不包含的runTest()方法时,就会自动调用类中__call()方法。当我们调用一个这个类中并不存在的静态方法runTest()时,则会自动调用类中__callStatic()方法

    class MethodTest
    {
        public function __call($name, $arguments)
        {
            // 注意:$name的值区分大小写
            echo "Calling object method '$name' " . implode(', ', $arguments) . "\n";
        }
        
        // PHP 5.3.0之后的版本
        public static function __callStatic($name, $arguments) 
        {
            echo "Calling static method '$name' " . implode(', ', $arguments) . "\n";
        }
    }   
    
    $obj = new MethodTest;
    $obj -> runTest('in object context');
    
    // PHP 5.3.0 版本以后
    MethodTest::runTest('in static context');
    

    Laravel中,如果你想要定义一个只处理单个行为的控制器,你可以在控制器中放置一个 __invoke 方法:

    namespace App\Http\Controllers;
    
    use App\User;
    use App\Http\Controllers\Controller;
    
    class ShowProfile extends Controller
    {
        /**
         * 显示给定用户的资料.
         *
         * @param  int  $id
         * @return View
         */
        public function __invoke($id)
        {
            return view('user.profile', ['user' => User::findOrFail($id)]);
        }
    }
    

    当注册单个行为控制器的路由时,你不需要指明方法

    Route::get('user/{id}', 'ShowProfile');
    

    你可以通过 Artisan 命令工具里的 make:controller 命令中的 --invokable 选项来生成一个可调用的控制器:

    php artisan make:controller ShowProfile --invokable
    
  2. 只在控制器的两个方法中执行中间件

class UserController extends Controller
{
    /**
     * 实例化一个新的控制器实例.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('auth');

		// 只在方法first和second中执行中间件
        $this->middleware('log')->only('first', 'second');

        $this->middleware('subscribed')->except('store');
    }
}
发布了40 篇原创文章 · 获赞 0 · 访问量 790

猜你喜欢

转载自blog.csdn.net/qj4865/article/details/104093208