Soy un líder de iOS en una aplicación y trato de corregir algunos errores de API mientras nuestro desarrollador "no está disponible". Soy casi completamente nuevo en Laravel y trato de verificar cuál es el método de solicitud. He seguido algunas instrucciones de otra pregunta, pero no he podido hacer que funcione:
public function defaults(Request $request, User $user){ $follow_ids = explode(',', env('FOLLOW_DEFAULTS')); if ($request->isMethod('post')) { return ['user' => $user]; } $user->follows()->syncWithoutDetaching($follow_ids); return ['user.follows' => $user->follows->toArray()]; }¿Sabes dónde podría estar equivocándome aquí? Gracias por adelantado.
Cuando se devuelve la solicitud, siempre parece saltear y devolver ['user.follows' => $user->follows->toArray()]
$request debe ser una instancia de Illuminate\Http\Request . Esta clase extiende la solicitud de Symfony ( Symfony\Component\HttpFoundation\Request ), que en realidad es donde se define el método isMethod() .
Básicamente, dada la definición de la función tal como se publicó, dice "si se trata de una solicitud POST , simplemente devuelva los datos del usuario. Si no es una solicitud POST (por ejemplo, GET ), actualice y devuelva los datos de la relación".
Entonces, si envía una solicitud POST , obtendrá la respuesta ['user' => $user] . Si envía cualquier otro método de solicitud (por ejemplo, GET ), modificará la follows relación y obtendrá la ['user.follows' => $user->follows->toArray()] .
Para mí, esto parece al revés. Creo que le gustaría que la solicitud POST actualice los datos y cualquier otra solicitud (por ejemplo, GET ) solo devuelva datos.
Si esto es correcto, debe negar su verificación de isMethod :
if (! $request->isMethod('post')) { return ['user' => $user]; } De manera más apropiada, debe definir acciones de controlador separadas para manejar las POST vs GET , pero eso está fuera del alcance de esta pregunta, y probablemente más de lo que desea ingresar como mantenedor temporal.
Parece que la solicitud no es un POST, por lo que la verificación if nunca es verdadera. Podría hacer eco del nombre del método de esta manera:
$method = $request->method(); echo $method; // or var_dump($method);